merge from testing

This commit is contained in:
Dick Hollenbeck 2010-12-22 23:25:23 -06:00
commit 2def9b3f7e
115 changed files with 4586 additions and 4357 deletions

View File

@ -4,6 +4,28 @@ KiCad ChangeLog 2010
Please add newer entries at the top, list the date and your name with Please add newer entries at the top, list the date and your name with
email address. email address.
2010-dec-21 UPDATE Wayne Stambaugh <stambaughw@verizon.net>
================================================================================
++all
* Doxygen comment warning fixes.
* Coding policy fixes.
++common
* Add clone method to EDA_ITEM object.
++EESchema
* Replace GenCopy() method with Clone() in all items derived from SCH_ITEM.
* Simplify repeat last schematic item with new Clone() method.
* Simplify duplicate schematic item method with new Clone() method.
* Separate objects in sch_items.h/cpp into separate files per object.
2010-dec-20, UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
================================================================================
common:
Rename EDA_Rect::Inside to EDA_Rect::Contains
( EDA_Rect::Inside( const EDA_Rect& aRect ) was very ambiguous )
Fix some Doxygen warnings and erroneous comments
2010-Dec-19 UPDATE Dick Hollenbeck <dick@softplc.com> 2010-Dec-19 UPDATE Dick Hollenbeck <dick@softplc.com>
================================================================================ ================================================================================
++new: ++new:

View File

@ -37,6 +37,7 @@ EDA_ITEM::EDA_ITEM( KICAD_T idType )
EDA_ITEM::EDA_ITEM( const EDA_ITEM& base ) EDA_ITEM::EDA_ITEM( const EDA_ITEM& base )
{ {
InitVars();
m_StructType = base.m_StructType; m_StructType = base.m_StructType;
m_Parent = base.m_Parent; m_Parent = base.m_Parent;
m_Son = base.m_Son; m_Son = base.m_Son;
@ -73,6 +74,13 @@ void EDA_ITEM::SetModified()
} }
EDA_ITEM* EDA_ITEM::doClone() const
{
wxCHECK_MSG( false, NULL, wxT( "doClone not implemented in derived class " ) + GetClass() +
wxT( ". Bad programmer." ) );
}
// see base_struct.h // see base_struct.h
SEARCH_RESULT EDA_ITEM::IterateForward( EDA_ITEM* listStart, SEARCH_RESULT EDA_ITEM::IterateForward( EDA_ITEM* listStart,
INSPECTOR* inspector, INSPECTOR* inspector,
@ -117,9 +125,9 @@ SEARCH_RESULT EDA_ITEM::Visit( INSPECTOR* inspector, const void* testData,
return SEARCH_CONTINUE; return SEARCH_CONTINUE;
} }
#if defined(DEBUG) #if defined(DEBUG)
// A function that should have been in wxWidgets // A function that should have been in wxWidgets
std::ostream& operator<<( std::ostream& out, const wxSize& size ) std::ostream& operator<<( std::ostream& out, const wxSize& size )
{ {
@ -136,13 +144,6 @@ std::ostream& operator<<( std::ostream& out, const wxPoint& pt )
} }
/**
* Function Show
* is used to output the object tree, currently for debugging only.
* @param nestLevel An aid to prettier tree indenting, and is the level
* of nesting of this object within the overall tree.
* @param os The ostream& to output to.
*/
void EDA_ITEM::Show( int nestLevel, std::ostream& os ) const void EDA_ITEM::Show( int nestLevel, std::ostream& os ) const
{ {
// XML output: // XML output:
@ -154,13 +155,6 @@ void EDA_ITEM::Show( int nestLevel, std::ostream& os ) const
} }
/**
* Function NestedSpace
* outputs nested space for pretty indenting.
* @param nestLevel The nest count
* @param os The ostream&, where to output
* @return std::ostream& - for continuation.
**/
std::ostream& EDA_ITEM::NestedSpace( int nestLevel, std::ostream& os ) std::ostream& EDA_ITEM::NestedSpace( int nestLevel, std::ostream& os )
{ {
for( int i = 0; i<nestLevel; ++i ) for( int i = 0; i<nestLevel; ++i )
@ -180,31 +174,42 @@ std::ostream& EDA_ITEM::NestedSpace( int nestLevel, std::ostream& os )
/**************************************************/ /**************************************************/
EDA_TextStruct::EDA_TextStruct( const wxString& text ) EDA_TextStruct::EDA_TextStruct( const wxString& text )
{ {
m_Size.x = m_Size.y = DEFAULT_SIZE_TEXT; /* XY size of font */ m_Size.x = m_Size.y = DEFAULT_SIZE_TEXT; // Width and height of font.
m_Orient = 0; /* Orient in 0.1 degrees */ m_Orient = 0; // Rotation angle in 0.1 degrees.
m_Attributs = 0; m_Attributs = 0;
m_Mirror = false; // display mirror if true m_Mirror = false; // display mirror if true
m_HJustify = GR_TEXT_HJUSTIFY_CENTER; m_HJustify = GR_TEXT_HJUSTIFY_CENTER; // Defualt horizontal justification is centered.
m_VJustify = GR_TEXT_VJUSTIFY_CENTER; /* Justifications Horiz et Vert du texte */ m_VJustify = GR_TEXT_VJUSTIFY_CENTER; // Defualt vertical justification is centered.
m_Thickness = 0; /* thickness */ m_Thickness = 0; // thickness
m_Italic = false; /* true = italic shape */ m_Italic = false; // true = italic shape.
m_Bold = false; m_Bold = false;
m_MultilineAllowed = false; // Set to true only for texts that can use multiline. m_MultilineAllowed = false; // Set to true for multiline text.
m_Text = text; m_Text = text;
} }
EDA_TextStruct::EDA_TextStruct( const EDA_TextStruct& aText )
{
m_Pos = aText.m_Pos;
m_Size = aText.m_Size;
m_Orient = aText.m_Orient;
m_Attributs = aText.m_Attributs;
m_Mirror = aText.m_Mirror;
m_HJustify = aText.m_HJustify;
m_VJustify = aText.m_VJustify;
m_Thickness = aText.m_Thickness;
m_Italic = aText.m_Italic;
m_Bold = aText.m_Bold;
m_MultilineAllowed = aText.m_MultilineAllowed;
m_Text = aText.m_Text;
}
EDA_TextStruct::~EDA_TextStruct() EDA_TextStruct::~EDA_TextStruct()
{ {
} }
/**
* Function LenSize
* @return the text lenght in internal units
* @param aLine : the line of text to consider.
* For single line text, this parameter is always m_Text
*/
int EDA_TextStruct::LenSize( const wxString& aLine ) const int EDA_TextStruct::LenSize( const wxString& aLine ) const
{ {
return ReturnGraphicTextWidth(aLine, m_Size.x, m_Italic, m_Bold ) + m_Thickness; return ReturnGraphicTextWidth(aLine, m_Size.x, m_Italic, m_Bold ) + m_Thickness;
@ -315,7 +320,7 @@ bool EDA_TextStruct::TextHitTest( const wxPoint& aPoint, int aAccuracy ) const
rect.Inflate( aAccuracy ); rect.Inflate( aAccuracy );
RotatePoint( &location, m_Pos, -m_Orient ); RotatePoint( &location, m_Pos, -m_Orient );
return rect.Inside( location ); return rect.Contains( location );
} }
@ -326,31 +331,15 @@ bool EDA_TextStruct::TextHitTest( const EDA_Rect& aRect, bool aContains, int aAc
rect.Inflate( aAccuracy ); rect.Inflate( aAccuracy );
if( aContains ) if( aContains )
return rect.Inside( GetTextBox( -1 ) ); return rect.Contains( GetTextBox( -1 ) );
return rect.Intersects( GetTextBox( -1 ) ); return rect.Intersects( GetTextBox( -1 ) );
} }
/***************************************************************/ void EDA_TextStruct::Draw( WinEDA_DrawPanel* aPanel, wxDC* aDC, const wxPoint& aOffset,
void EDA_TextStruct::Draw( WinEDA_DrawPanel* aPanel, wxDC* aDC, EDA_Colors aColor, int aDrawMode,
const wxPoint& aOffset, EDA_Colors aColor,
int aDrawMode,
GRTraceMode aFillMode, EDA_Colors aAnchor_color ) GRTraceMode aFillMode, EDA_Colors aAnchor_color )
/***************************************************************/
/**
* Function Draw
* Draws this, that can be a multiline text
* @param aPanel = the current DrawPanel
* @param aDC = the current Device Context
* @param aOffset = draw offset (usually (0,0))
* @param EDA_Colors aColor = text color
* @param aDrawMode = GR_OR, GR_XOR.., -1 to use the current mode.
* @param aFillMode = FILAIRE, FILLED or SKETCH
* @param EDA_Colors aAnchor_color = anchor color ( UNSPECIFIED_COLOR = do not draw anchor ).
*/
{ {
if( m_MultilineAllowed ) if( m_MultilineAllowed )
{ {
@ -361,6 +350,7 @@ void EDA_TextStruct::Draw( WinEDA_DrawPanel* aPanel, wxDC* aDC,
offset.y = GetInterline(); offset.y = GetInterline();
RotatePoint( &offset, m_Orient ); RotatePoint( &offset, m_Orient );
for( unsigned i = 0; i<list->Count(); i++ ) for( unsigned i = 0; i<list->Count(); i++ )
{ {
wxString txt = list->Item( i ); wxString txt = list->Item( i );
@ -391,24 +381,10 @@ void EDA_TextStruct::Draw( WinEDA_DrawPanel* aPanel, wxDC* aDC,
} }
/**
* Function DrawOneLineOfText
* Draw a single text line.
* Used to draw each line of this EDA_TextStruct, that can be multiline
* @param aPanel = the current DrawPanel
* @param aDC = the current Device Context
* @param aOffset = draw offset (usually (0,0))
* @param EDA_Colors aColor = text color
* @param aDrawMode = GR_OR, GR_XOR.., -1 to use the current mode.
* @param aFillMode = FILAIRE, FILLED or SKETCH
* @param EDA_Colors aAnchor_color = anchor color ( UNSPECIFIED_COLOR = do not draw anchor ).
* @param EDA_Colors aText = the single line of text to draw.
* @param EDA_Colors aPos = the position of this line ).
*/
void EDA_TextStruct::DrawOneLineOfText( WinEDA_DrawPanel* aPanel, wxDC* aDC, void EDA_TextStruct::DrawOneLineOfText( WinEDA_DrawPanel* aPanel, wxDC* aDC,
const wxPoint& aOffset, EDA_Colors aColor, const wxPoint& aOffset, EDA_Colors aColor,
int aDrawMode, int aDrawMode, GRTraceMode aFillMode,
GRTraceMode aFillMode, EDA_Colors aAnchor_color, EDA_Colors aAnchor_color,
wxString& aText, wxPoint aPos ) wxString& aText, wxPoint aPos )
{ {
int width = m_Thickness; int width = m_Thickness;
@ -449,23 +425,20 @@ void EDA_TextStruct::DrawOneLineOfText( WinEDA_DrawPanel* aPanel, wxDC* aDC,
if( m_Mirror ) if( m_Mirror )
size.x = -size.x; size.x = -size.x;
DrawGraphicText( aPanel, aDC, DrawGraphicText( aPanel, aDC, aOffset + aPos, aColor, aText, m_Orient, size,
aOffset + aPos, aColor, aText,
m_Orient, size,
m_HJustify, m_VJustify, width, m_Italic, m_Bold ); m_HJustify, m_VJustify, width, m_Italic, m_Bold );
} }
/**
* Function GetStyleName
* @return a wwString withe the style name( Normal, Italic, Bold, Bold+Italic)
*/
wxString EDA_TextStruct::GetTextStyleName() wxString EDA_TextStruct::GetTextStyleName()
{ {
int style = 0; int style = 0;
if( m_Italic ) if( m_Italic )
style = 1; style = 1;
if( m_Bold ) if( m_Bold )
style += 2; style += 2;
wxString stylemsg[4] = { wxString stylemsg[4] = {
_("Normal"), _("Normal"),
_("Italic"), _("Italic"),
@ -481,17 +454,14 @@ wxString EDA_TextStruct::GetTextStyleName()
/* Class EDA_Rect */ /* Class EDA_Rect */
/******************/ /******************/
/******************************/
void EDA_Rect::Normalize() void EDA_Rect::Normalize()
/******************************/
// Ensure the height ant width are >= 0
{ {
if( m_Size.y < 0 ) if( m_Size.y < 0 )
{ {
m_Size.y = -m_Size.y; m_Size.y = -m_Size.y;
m_Pos.y -= m_Size.y; m_Pos.y -= m_Size.y;
} }
if( m_Size.x < 0 ) if( m_Size.x < 0 )
{ {
m_Size.x = -m_Size.x; m_Size.x = -m_Size.x;
@ -500,63 +470,65 @@ void EDA_Rect::Normalize()
} }
/**
* Function Move
* Move this rectangle by the aMoveVector value (this is a relative move)
* @param aMoveVector = a wxPoint that is the value to move this rectangle
*/
void EDA_Rect::Move( const wxPoint& aMoveVector ) void EDA_Rect::Move( const wxPoint& aMoveVector )
{ {
m_Pos += aMoveVector; m_Pos += aMoveVector;
} }
/* Return TRUE if point is in Rect bool EDA_Rect::Contains( const wxPoint& aPoint ) const
* Accept rect size < 0
*/
bool EDA_Rect::Inside( const wxPoint& point ) const
{ {
int rel_posx = point.x - m_Pos.x; wxPoint rel_pos = aPoint - m_Pos;
int rel_posy = point.y - m_Pos.y;
wxSize size = m_Size; wxSize size = m_Size;
if( size.x < 0 ) if( size.x < 0 )
{ {
size.x = -size.x; size.x = -size.x;
rel_posx += size.x; rel_pos.x += size.x;
} }
if( size.y < 0 ) if( size.y < 0 )
{ {
size.y = -size.y; size.y = -size.y;
rel_posy += size.y; rel_pos.y += size.y;
} }
return (rel_posx >= 0) && (rel_posy >= 0) && ( rel_posy <= size.y) && ( rel_posx <= size.x); return (rel_pos.x >= 0) && (rel_pos.y >= 0) && ( rel_pos.y <= size.y) && ( rel_pos.x <= size.x);
} }
/*
bool EDA_Rect::Inside( const EDA_Rect& aRect ) const * return true if aRect is inside me (or on boundaries)
*/
bool EDA_Rect::Contains( const EDA_Rect& aRect ) const
{ {
wxRect rect = aRect; return Contains( aRect.GetOrigin() ) && Contains( aRect.GetEnd() );
wxRect me = wxRect();
return me.Contains( rect );
} }
bool EDA_Rect::Intersects( const EDA_Rect aRect ) const /* Intersects
* test for a common area between 2 rect.
* return true if at least a common point is found
*/
bool EDA_Rect::Intersects( const EDA_Rect& aRect ) const
{ {
// this logic taken from wxWidgets' geometry.cpp file: // this logic taken from wxWidgets' geometry.cpp file:
bool rc; bool rc;
EDA_Rect me(*this);
EDA_Rect rect(aRect);
me.Normalize(); // ensure size is >= 0
rect.Normalize(); // ensure size is >= 0
int left = MAX( m_Pos.x, aRect.m_Pos.x ); // calculate the left common area coordinate:
int right = MIN( m_Pos.x + m_Size.x, aRect.m_Pos.x + aRect.m_Size.x ); int left = MAX( me.m_Pos.x, rect.m_Pos.x );
int top = MAX( m_Pos.y, aRect.m_Pos.y ); // calculate the right common area coordinate:
int bottom = MIN( m_Pos.y + m_Size.y, aRect.m_Pos.y + aRect.m_Size.y ); int right = MIN( me.m_Pos.x + m_Size.x, rect.m_Pos.x + rect.m_Size.x );
// calculate the upper common area coordinate:
int top = MAX( me.m_Pos.y, aRect.m_Pos.y );
// calculate the lower common area coordinate:
int bottom = MIN( me.m_Pos.y + m_Size.y, rect.m_Pos.y + rect.m_Size.y );
if( left < right && top < bottom ) // if a common area exists, it must have a positive (null accepted) size
if( left <= right && top <= bottom )
rc = true; rc = true;
else else
rc = false; rc = false;
@ -565,35 +537,14 @@ bool EDA_Rect::Intersects( const EDA_Rect aRect ) const
} }
/**************************************************/
EDA_Rect& EDA_Rect::Inflate( int aDelta ) EDA_Rect& EDA_Rect::Inflate( int aDelta )
/**************************************************/
/**
* Function Inflate
* Inflate "this": move each horizontal edgeand each vertical edge by aDelta
* toward rect outside
* if aDelta is negative, move toward rect inside (deflate)
* Works for positive and negative rect size
*
*/
{ {
Inflate( aDelta, aDelta ); Inflate( aDelta, aDelta );
return *this; return *this;
} }
/**************************************************/
EDA_Rect& EDA_Rect::Inflate( wxCoord dx, wxCoord dy )
/**************************************************/
/** EDA_Rect& EDA_Rect::Inflate( wxCoord dx, wxCoord dy )
* Function Inflate
* Inflate "this": move each horizontal edge by dx and each vertical edge by dy
* toward rect outside
* if dx and/or dy is negative, move toward rect inside (deflate)
* Works for positive and negative rect size
*
*/
{ {
if( m_Size.x >= 0 ) if( m_Size.x >= 0 )
{ {
@ -626,7 +577,6 @@ EDA_Rect& EDA_Rect::Inflate( wxCoord dx, wxCoord dy )
} }
} }
if( m_Size.y >= 0 ) if( m_Size.y >= 0 )
{ {
if( m_Size.y < -2 * dy ) if( m_Size.y < -2 * dy )
@ -662,12 +612,6 @@ EDA_Rect& EDA_Rect::Inflate( wxCoord dx, wxCoord dy )
} }
/**
* Function Merge
* modifies Position and Size of this in order to contain the given rect
* mainly used to calculate bounding boxes
* @param aRect = given rect to merge with this
*/
void EDA_Rect::Merge( const EDA_Rect& aRect ) void EDA_Rect::Merge( const EDA_Rect& aRect )
{ {
Normalize(); // ensure width and height >= 0 Normalize(); // ensure width and height >= 0
@ -684,12 +628,7 @@ void EDA_Rect::Merge( const EDA_Rect& aRect )
SetEnd( end ); SetEnd( end );
} }
/**
* Function Merge
* modifies Position and Size of this in order to contain the given point
* mainly used to calculate bounding boxes
* @param aPoint = given point to merge with this
*/
void EDA_Rect::Merge( const wxPoint& aPoint ) void EDA_Rect::Merge( const wxPoint& aPoint )
{ {
Normalize(); // ensure width and height >= 0 Normalize(); // ensure width and height >= 0

View File

@ -282,7 +282,7 @@ void WinEDA_BasicFrame::GetKicadHelp( wxCommandEvent& event )
/* /*
* *
*/ */
void WinEDA_BasicFrame::GetKicadAbout( wxCommandEvent& WXUNUSED(event) ) void WinEDA_BasicFrame::GetKicadAbout( wxCommandEvent& event )
{ {
bool ShowAboutDialog(wxWindow * parent); bool ShowAboutDialog(wxWindow * parent);
ShowAboutDialog(this); ShowAboutDialog(this);
@ -364,7 +364,7 @@ static inline const char* KICAD_BUILD_OPTIONS_SIGNATURE()
#endif #endif
void WinEDA_BasicFrame::CopyVersionInfoToClipboard( wxCommandEvent& WXUNUSED( event ) ) void WinEDA_BasicFrame::CopyVersionInfoToClipboard( wxCommandEvent& event )
{ {
if( !wxTheClipboard->Open() ) if( !wxTheClipboard->Open() )
{ {

View File

@ -6,7 +6,7 @@
#endif #endif
#ifndef KICAD_BUILD_VERSION #ifndef KICAD_BUILD_VERSION
#define KICAD_BUILD_VERSION "(2010-12-18 BZR 26xx)" #define KICAD_BUILD_VERSION "(2010-12-22 BZR 2676)"
#endif #endif
//#define VERSION_STABILITY "stable" //#define VERSION_STABILITY "stable"

View File

@ -59,6 +59,17 @@ void MARKER_BASE::init()
} }
MARKER_BASE::MARKER_BASE( const MARKER_BASE& aMarker )
{
m_Pos = aMarker.m_Pos;
m_Corners = aMarker.m_Corners;
m_MarkerType = aMarker.m_MarkerType;
m_Color = aMarker.m_Color;
m_ShapeBoundingBox = aMarker.m_ShapeBoundingBox;
m_ScalingFactor = aMarker.m_ScalingFactor;
}
MARKER_BASE::MARKER_BASE() MARKER_BASE::MARKER_BASE()
{ {
m_ScalingFactor = M_SHAPE_SCALE; m_ScalingFactor = M_SHAPE_SCALE;
@ -118,17 +129,10 @@ bool MARKER_BASE::HitTestMarker( const wxPoint& refPos ) const
rel_pos.x /= m_ScalingFactor; rel_pos.x /= m_ScalingFactor;
rel_pos.y /= m_ScalingFactor; rel_pos.y /= m_ScalingFactor;
return m_ShapeBoundingBox.Inside( rel_pos ); return m_ShapeBoundingBox.Contains( rel_pos );
} }
/**
* Function GetBoundingBoxMarker
* returns the orthogonal, bounding box of this object for display purposes.
* This box should be an enclosing perimeter for visible components of this
* object, and the units should be in the pcb or schematic coordinate system.
* It is OK to overestimate the size by a few counts.
*/
EDA_Rect MARKER_BASE::GetBoundingBoxMarker() const EDA_Rect MARKER_BASE::GetBoundingBoxMarker() const
{ {
wxSize realsize = m_ShapeBoundingBox.GetSize(); wxSize realsize = m_ShapeBoundingBox.GetSize();
@ -141,15 +145,8 @@ EDA_Rect MARKER_BASE::GetBoundingBoxMarker() const
return EDA_Rect( m_Pos, realsize ); return EDA_Rect( m_Pos, realsize );
} }
/**********************************************************************/
void MARKER_BASE::DrawMarker( WinEDA_DrawPanel* aPanel, wxDC* aDC, int aDrawMode, void MARKER_BASE::DrawMarker( WinEDA_DrawPanel* aPanel, wxDC* aDC, int aDrawMode,
const wxPoint& aOffset ) const wxPoint& aOffset )
/**********************************************************************/
/**
* Function DrawMarker
* The shape is the polygon defined in m_Corners (array of wxPoints)
*/
{ {
wxPoint corners[CORNERS_COUNT]; wxPoint corners[CORNERS_COUNT];
@ -172,15 +169,10 @@ void MARKER_BASE::DrawMarker( WinEDA_DrawPanel* aPanel, wxDC* aDC, int aDrawMode
} }
/**
* Function DisplayMarkerInfo
* Displays the full info of this marker, within an HTML window
*/
void MARKER_BASE::DisplayMarkerInfo( WinEDA_DrawFrame* aFrame ) void MARKER_BASE::DisplayMarkerInfo( WinEDA_DrawFrame* aFrame )
{ {
wxString msg = m_drc.ShowHtml(); wxString msg = m_drc.ShowHtml();
DIALOG_DISPLAY_HTML_TEXT_BASE DIALOG_DISPLAY_HTML_TEXT_BASE infodisplay( (wxWindow*)aFrame, wxID_ANY, _( "Marker Info" ),
infodisplay( (wxWindow*)aFrame, wxID_ANY, _("Marker Info"),
wxGetMousePosition(), wxSize( 550, 140 ) ); wxGetMousePosition(), wxSize( 550, 140 ) );
infodisplay.m_htmlWindow->SetPage( msg ); infodisplay.m_htmlWindow->SetPage( msg );

View File

@ -879,7 +879,7 @@ void wxSVGFileDC::DoDrawIcon( const class wxIcon& myIcon, wxCoord x, wxCoord y )
void wxSVGFileDC::DoDrawBitmap( const class wxBitmap& bmp, void wxSVGFileDC::DoDrawBitmap( const class wxBitmap& bmp,
wxCoord x, wxCoord x,
wxCoord y, wxCoord y,
bool WXUNUSED ( bTransparent) /*=0*/ ) bool bTransparent /*=0*/ )
{ {
if( m_graphics_changed ) if( m_graphics_changed )
NewGraphics(); NewGraphics();

View File

@ -251,7 +251,7 @@ bool WinEDA_DrawPanel::IsPointOnDisplay( wxPoint ref_pos )
GetScreen()->Unscale( display_rect.m_Size ); GetScreen()->Unscale( display_rect.m_Size );
#endif #endif
return display_rect.Inside( ref_pos ); return display_rect.Contains( ref_pos );
} }

View File

@ -188,7 +188,7 @@ int GRMapY( int y )
*/ */
static bool clipLine( EDA_Rect* aClipBox, int& x1, int& y1, int& x2, int& y2 ) static bool clipLine( EDA_Rect* aClipBox, int& x1, int& y1, int& x2, int& y2 )
{ {
if( aClipBox->Inside( x1, y1 ) && aClipBox->Inside( x2, y2 ) ) if( aClipBox->Contains( x1, y1 ) && aClipBox->Contains( x2, y2 ) )
return false; return false;
wxRect rect = *aClipBox; wxRect rect = *aClipBox;
@ -206,7 +206,7 @@ static bool clipLine( EDA_Rect* aClipBox, int& x1, int& y1, int& x2, int& y2 )
tmpY2 = y2; tmpY2 = y2;
#endif #endif
if( aClipBox->Inside( x1, y1 ) ) if( aClipBox->Contains( x1, y1 ) )
{ {
if( x1 == x2 ) /* Vertical line, clip Y. */ if( x1 == x2 ) /* Vertical line, clip Y. */
{ {
@ -263,7 +263,7 @@ static bool clipLine( EDA_Rect* aClipBox, int& x1, int& y1, int& x2, int& y2 )
#endif #endif
return false; return false;
} }
else if( aClipBox->Inside( x2, y2 ) ) else if( aClipBox->Contains( x2, y2 ) )
{ {
if( x1 == x2 ) /* Vertical line, clip Y. */ if( x1 == x2 ) /* Vertical line, clip Y. */
{ {
@ -704,7 +704,7 @@ void GRPutPixel( EDA_Rect* ClipBox, wxDC* DC, int x, int y, int Color )
void GRSPutPixel( EDA_Rect* ClipBox, wxDC* DC, int x, int y, int Color ) void GRSPutPixel( EDA_Rect* ClipBox, wxDC* DC, int x, int y, int Color )
{ {
if( ClipBox && !ClipBox->Inside( x, y ) ) if( ClipBox && !ClipBox->Contains( x, y ) )
return; return;
GRSetColorPen( DC, Color ); GRSetColorPen( DC, Color );

View File

@ -170,15 +170,14 @@ wxString ReturnKeyNameFromKeyCode( int aKeycode, bool* aIsFound )
} }
/** /* AddHotkeyName
* Function AddHotkeyName
* Add the key name from the Command id value ( m_Idcommand member value) * Add the key name from the Command id value ( m_Idcommand member value)
* @param aText = a wxString. returns aText + key name * aText = a wxString. returns aText + key name
* @param aList = pointer to a Ki_HotkeyInfo list of commands * aList = pointer to a Ki_HotkeyInfo list of commands
* @param aCommandId = Command Id value * aCommandId = Command Id value
* @param aIsShortCut = true to add <tab><keyname> (active shortcuts in menus) * aIsShortCut = true to add <tab><keyname> (active shortcuts in menus)
* = false to add <spaces><(keyname)> * = false to add <spaces><(keyname)>
* @return a wxString (aTest + key name) if key found or aText without modification * Return a wxString (aTest + key name) if key found or aText without modification
*/ */
wxString AddHotkeyName( const wxString& aText, Ki_HotkeyInfo** aList, wxString AddHotkeyName( const wxString& aText, Ki_HotkeyInfo** aList,
int aCommandId, bool aIsShortCut ) int aCommandId, bool aIsShortCut )
@ -200,15 +199,14 @@ wxString AddHotkeyName( const wxString& aText, Ki_HotkeyInfo** aList,
} }
/** /* AddHotkeyName
* Function AddHotkeyName
* Add the key name from the Command id value ( m_Idcommand member value) * Add the key name from the Command id value ( m_Idcommand member value)
* @param aText = a wxString. returns aText + key name * aText = a wxString. returns aText + key name
* @param aList = pointer to a Ki_HotkeyInfoSectionDescriptor DescrList of commands * aList = pointer to a Ki_HotkeyInfoSectionDescriptor DescrList of commands
* @param aCommandId = Command Id value * aCommandId = Command Id value
* @param aIsShortCut = true to add <tab><keyname> (active shortcuts in menus) * aIsShortCut = true to add <tab><keyname> (active shortcuts in menus)
* = false to add <spaces><(keyname)> * = false to add <spaces><(keyname)>
* @return a wxString (aTest + key name) if key found or aText without modification * Return a wxString (aText + key name) if key found or aText without modification
*/ */
wxString AddHotkeyName( const wxString& aText, wxString AddHotkeyName( const wxString& aText,
struct Ki_HotkeyInfoSectionDescriptor* aDescList, struct Ki_HotkeyInfoSectionDescriptor* aDescList,
@ -325,13 +323,9 @@ int ReturnKeyCodeFromKeyName( const wxString& keyname )
} }
/** /* DisplayHotkeyList
* Function DisplayHotkeyList
* Displays the current hotkey list * Displays the current hotkey list
* @param aFrame = current active frame * aList = a Ki_HotkeyInfoSectionDescriptor list(Null terminated)
* @param aList = pointer to a Ki_HotkeyInfoSectionDescriptor list
*(Null terminated)
* @return none
*/ */
void DisplayHotkeyList( WinEDA_DrawFrame* aFrame, void DisplayHotkeyList( WinEDA_DrawFrame* aFrame,
struct Ki_HotkeyInfoSectionDescriptor* aDescList ) struct Ki_HotkeyInfoSectionDescriptor* aDescList )
@ -478,7 +472,6 @@ int WinEDA_BasicFrame::ReadHotkeyConfigFile(
return 1; return 1;
} }
void ReadHotkeyConfig( const wxString& Appname, void ReadHotkeyConfig( const wxString& Appname,
struct Ki_HotkeyInfoSectionDescriptor* aDescList ) struct Ki_HotkeyInfoSectionDescriptor* aDescList )
{ {
@ -496,11 +489,9 @@ void ReadHotkeyConfig( const wxString& Appname,
ParseHotkeyConfig( data, aDescList ); ParseHotkeyConfig( data, aDescList );
} }
/* Function ReadHotkeyConfig
/**
* Function ReadHotkeyConfig
* Read configuration data and fill the current hotkey list with hotkeys * Read configuration data and fill the current hotkey list with hotkeys
* @param aDescList = current hotkey list descr. to initialise. * aDescList is the current hotkey list descr. to initialise.
*/ */
int WinEDA_BasicFrame::ReadHotkeyConfig( struct Ki_HotkeyInfoSectionDescriptor* aDescList ) int WinEDA_BasicFrame::ReadHotkeyConfig( struct Ki_HotkeyInfoSectionDescriptor* aDescList )
{ {
@ -509,16 +500,14 @@ int WinEDA_BasicFrame::ReadHotkeyConfig( struct Ki_HotkeyInfoSectionDescriptor*
} }
/** /* Function ParseHotkeyConfig
* Function ParseHotkeyConfig
* the input format is: shortcut "key" "function" * the input format is: shortcut "key" "function"
* lines starting by # are ignored (comments) * lines starting by # are ignored (comments)
* lines like [xxx] are tags (example: [common] or [libedit] which identify * lines like [xxx] are tags (example: [common] or [libedit] which identify sections
* sections
*/ */
void ParseHotkeyConfig( void ParseHotkeyConfig(
const wxString& data, const wxString& data,
struct Ki_HotkeyInfoSectionDescriptor* DescList ) struct Ki_HotkeyInfoSectionDescriptor* aDescList )
{ {
/* Read the config */ /* Read the config */
wxStringTokenizer tokenizer( data, L"\r\n", wxTOKEN_STRTOK ); wxStringTokenizer tokenizer( data, L"\r\n", wxTOKEN_STRTOK );
@ -536,7 +525,7 @@ void ParseHotkeyConfig(
if( line_type[0] == '[' ) // A tag is found. search infos in list if( line_type[0] == '[' ) // A tag is found. search infos in list
{ {
CurrentHotkeyList = 0; CurrentHotkeyList = 0;
Ki_HotkeyInfoSectionDescriptor* DList = DescList; Ki_HotkeyInfoSectionDescriptor* DList = aDescList;
for( ; DList->m_HK_InfoList; DList++ ) for( ; DList->m_HK_InfoList; DList++ )
{ {
if( *DList->m_SectionTag == line_type ) if( *DList->m_SectionTag == line_type )
@ -639,8 +628,7 @@ void WinEDA_BasicFrame::ExportHotkeyConfigToFile(
} }
/** add hotkey config options submenu to a menu /* add hotkey config options submenu to aMenu
* @param menu : root menu
*/ */
void AddHotkeyConfigMenu( wxMenu* aMenu ) void AddHotkeyConfigMenu( wxMenu* aMenu )
{ {

View File

@ -29,6 +29,13 @@ SCH_ITEM::SCH_ITEM( EDA_ITEM* aParent, KICAD_T aType ) :
} }
SCH_ITEM::SCH_ITEM( const SCH_ITEM& aItem ) :
EDA_ITEM( aItem )
{
m_Layer = aItem.m_Layer;
}
SCH_ITEM::~SCH_ITEM() SCH_ITEM::~SCH_ITEM()
{ {
// Do not let the connections container go out of scope with any ojbects or they // Do not let the connections container go out of scope with any ojbects or they
@ -101,5 +108,5 @@ bool SCH_ITEM::IsConnected( const wxPoint& aPosition ) const
if( m_Flags & STRUCT_DELETED || m_Flags & SKIP_STRUCT ) if( m_Flags & STRUCT_DELETED || m_Flags & SKIP_STRUCT )
return false; return false;
return DoIsConnected( aPosition ); return doIsConnected( aPosition );
} }

View File

@ -36,10 +36,12 @@ const wxString FootprintAliasFileWildcard( _( "Kicad footprint alias files (*.eq
const wxString titleLibLoadError( _( "Library Load Error" ) ); const wxString titleLibLoadError( _( "Library Load Error" ) );
/* MacOSX: Needed for file association /*
* MacOSX: Needed for file association
* http://wiki.wxwidgets.org/WxMac-specific_topics * http://wiki.wxwidgets.org/WxMac-specific_topics
*/ */
void WinEDA_App::MacOpenFile(const wxString &fileName) { void WinEDA_App::MacOpenFile(const wxString &fileName)
{
wxFileName filename = fileName; wxFileName filename = fileName;
wxString oldPath; wxString oldPath;
WinEDA_CvpcbFrame * frame = ((WinEDA_CvpcbFrame*)GetTopWindow()); WinEDA_CvpcbFrame * frame = ((WinEDA_CvpcbFrame*)GetTopWindow());

View File

@ -1,6 +1,6 @@
/** /*
* @file menucfg.cpp * menubar.cpp
* (Re)Create the CvPCB main MenuBar * Build the CvPCB MenuBar
*/ */
#include "fctsys.h" #include "fctsys.h"
#include "appl_wxstruct.h" #include "appl_wxstruct.h"

View File

@ -108,11 +108,10 @@ void DISPLAY_FOOTPRINTS_FRAME::RedrawActiveWindow( wxDC* DC, bool EraseBg )
/* /*
* Redraw the BOARD items but not cursors, axis or grid. * Redraw the BOARD items but not cursors, axis or grid.
*/ */
void BOARD::Draw( WinEDA_DrawPanel* aPanel, wxDC* DC, void BOARD::Draw( WinEDA_DrawPanel* aPanel, wxDC* aDC, int aDrawMode, const wxPoint& aOffset )
int aDrawMode, const wxPoint& offset )
{ {
if( m_Modules ) if( m_Modules )
{ {
m_Modules->Draw( aPanel, DC, GR_COPY ); m_Modules->Draw( aPanel, aDC, GR_COPY );
} }
} }

View File

@ -115,10 +115,14 @@ set(EESCHEMA_SRCS
operations_on_items_lists.cpp operations_on_items_lists.cpp
pinedit.cpp pinedit.cpp
plot.cpp plot.cpp
sch_bus_entry.cpp
sch_component.cpp sch_component.cpp
sch_field.cpp sch_field.cpp
sch_items.cpp sch_items.cpp
sch_line.cpp
sch_marker.cpp sch_marker.cpp
sch_no_connect.cpp
sch_polyline.cpp
sch_screen.cpp sch_screen.cpp
sch_sheet.cpp sch_sheet.cpp
sch_sheet_path.cpp sch_sheet_path.cpp

View File

@ -16,8 +16,11 @@
#include "class_library.h" #include "class_library.h"
#include "lib_pin.h" #include "lib_pin.h"
#include "protos.h" #include "protos.h"
#include "sch_bus_entry.h"
#include "sch_marker.h" #include "sch_marker.h"
#include "sch_items.h" #include "sch_items.h"
#include "sch_line.h"
#include "sch_no_connect.h"
#include "sch_text.h" #include "sch_text.h"
#include "sch_component.h" #include "sch_component.h"
#include "sch_sheet.h" #include "sch_sheet.h"
@ -37,9 +40,9 @@ void DuplicateItemsInList( SCH_SCREEN* screen,
static void CollectStructsToDrag( SCH_SCREEN* screen ); static void CollectStructsToDrag( SCH_SCREEN* screen );
static void AddPickedItem( SCH_SCREEN* screen, wxPoint aPosition ); static void AddPickedItem( SCH_SCREEN* screen, wxPoint aPosition );
static LIB_PIN* GetNextPinPosition( SCH_COMPONENT* aDrawLibItem, static LIB_PIN* GetNextPinPosition( SCH_COMPONENT* aComponent,
wxPoint& aPosition, wxPoint& aPosition,
bool aSearchFirst ); LIB_PIN* aPin );
static void DrawMovingBlockOutlines( WinEDA_DrawPanel* panel, wxDC* DC, bool erase ); static void DrawMovingBlockOutlines( WinEDA_DrawPanel* panel, wxDC* DC, bool erase );
static void SaveStructListForPaste( PICKED_ITEMS_LIST& aItemsList ); static void SaveStructListForPaste( PICKED_ITEMS_LIST& aItemsList );
@ -226,6 +229,7 @@ bool SCH_EDIT_FRAME::HandleBlockEnd( wxDC* DC )
} }
if( DrawPanel->ManageCurseur != NULL ) if( DrawPanel->ManageCurseur != NULL )
{
switch( block->m_Command ) switch( block->m_Command )
{ {
case BLOCK_IDLE: case BLOCK_IDLE:
@ -234,14 +238,14 @@ bool SCH_EDIT_FRAME::HandleBlockEnd( wxDC* DC )
case BLOCK_DRAG: /* Drag */ case BLOCK_DRAG: /* Drag */
BreakSegmentOnJunction( GetScreen() ); BreakSegmentOnJunction( GetScreen() );
// fall through
case BLOCK_ROTATE: case BLOCK_ROTATE:
case BLOCK_MIRROR_X: case BLOCK_MIRROR_X:
case BLOCK_MIRROR_Y: case BLOCK_MIRROR_Y:
case BLOCK_MOVE: /* Move */ case BLOCK_MOVE: /* Move */
case BLOCK_COPY: /* Copy */ case BLOCK_COPY: /* Copy */
PickItemsInBlock( GetScreen()->m_BlockLocate, GetScreen() ); PickItemsInBlock( GetScreen()->m_BlockLocate, GetScreen() );
// fall through
case BLOCK_PRESELECT_MOVE: /* Move with preselection list*/ case BLOCK_PRESELECT_MOVE: /* Move with preselection list*/
if( block->GetCount() ) if( block->GetCount() )
{ {
@ -301,6 +305,7 @@ bool SCH_EDIT_FRAME::HandleBlockEnd( wxDC* DC )
case BLOCK_ABORT: /* not executed here */ case BLOCK_ABORT: /* not executed here */
break; break;
} }
}
if( block->m_Command == BLOCK_ABORT ) if( block->m_Command == BLOCK_ABORT )
{ {
@ -595,7 +600,8 @@ void SCH_EDIT_FRAME::PasteListOfItems( wxDC* DC )
} }
/* creates the list of items found when a drag block is initiated. /* Set in m_BlockLocate.m_ItemsSelection items members .m_Flags to SELECTED
* Creates the list of items found when a drag block is initiated.
* items are those selected in window block an some items outside this area but * items are those selected in window block an some items outside this area but
* connected to a selected item (connected wires to a component or an entry ) * connected to a selected item (connected wires to a component or an entry )
*/ */
@ -624,14 +630,14 @@ static void CollectStructsToDrag( SCH_SCREEN* screen )
/* Remove the displacement of segment and undo the selection. */ /* Remove the displacement of segment and undo the selection. */
for( unsigned ii = 0; ii < pickedlist->GetCount(); ii++ ) for( unsigned ii = 0; ii < pickedlist->GetCount(); ii++ )
{ {
Struct = (SCH_ITEM*)(SCH_ITEM*) pickedlist->GetPickedItem( ii ); Struct = (SCH_ITEM*)pickedlist->GetPickedItem( ii );
if( Struct->Type() == SCH_LINE_T ) if( Struct->Type() == SCH_LINE_T )
{ {
SegmStruct = (SCH_LINE*) Struct; SegmStruct = (SCH_LINE*) Struct;
if( !screen->m_BlockLocate.Inside( SegmStruct->m_Start ) ) if( !screen->m_BlockLocate.Contains( SegmStruct->m_Start ) )
SegmStruct->m_Flags |= STARTPOINT; SegmStruct->m_Flags |= STARTPOINT;
if( !screen->m_BlockLocate.Inside( SegmStruct->m_End ) ) if( !screen->m_BlockLocate.Contains( SegmStruct->m_End ) )
SegmStruct->m_Flags |= ENDPOINT; SegmStruct->m_Flags |= ENDPOINT;
// Save m_Flags for Undo/redo drag operations: // Save m_Flags for Undo/redo drag operations:
@ -642,17 +648,16 @@ static void CollectStructsToDrag( SCH_SCREEN* screen )
/* Search for other items to drag. They are end wires connected to selected /* Search for other items to drag. They are end wires connected to selected
* items * items
*/ */
for( unsigned ii = 0; ii < pickedlist->GetCount(); ii++ ) for( unsigned ii = 0; ii < pickedlist->GetCount(); ii++ )
{ {
Struct = (SCH_ITEM*)(SCH_ITEM*) pickedlist->GetPickedItem( ii ); Struct = (SCH_ITEM*)pickedlist->GetPickedItem( ii );
if( ( Struct->Type() == SCH_LABEL_T ) if( ( Struct->Type() == SCH_LABEL_T )
|| ( Struct->Type() == SCH_GLOBAL_LABEL_T ) || ( Struct->Type() == SCH_GLOBAL_LABEL_T )
|| ( Struct->Type() == SCH_HIERARCHICAL_LABEL_T ) ) || ( Struct->Type() == SCH_HIERARCHICAL_LABEL_T ) )
{ {
#undef STRUCT #undef STRUCT
#define STRUCT ( (SCH_TEXT*) Struct ) #define STRUCT ( (SCH_TEXT*) Struct )
if( !screen->m_BlockLocate.Inside( STRUCT->m_Pos ) ) if( !screen->m_BlockLocate.Contains( STRUCT->m_Pos ) )
{ {
AddPickedItem( screen, STRUCT->m_Pos ); AddPickedItem( screen, STRUCT->m_Pos );
} }
@ -661,20 +666,20 @@ static void CollectStructsToDrag( SCH_SCREEN* screen )
if( Struct->Type() == SCH_COMPONENT_T ) if( Struct->Type() == SCH_COMPONENT_T )
{ {
// Add all pins of the selected component to list // Add all pins of the selected component to list
LIB_PIN* pin;
wxPoint pos; wxPoint pos;
pin = GetNextPinPosition( (SCH_COMPONENT*) Struct, pos, true ); LIB_PIN* pin = GetNextPinPosition( (SCH_COMPONENT*) Struct, pos, NULL );
while( pin ) while( pin )
{ {
if( !screen->m_BlockLocate.Inside( pos ) ) if( !screen->m_BlockLocate.Contains( pos ) )
{ {
// This pin is outside area, // This pin is outside area,
// but because it it the pin of a selected component // but because it is a pin of a selected component
// we must also select connected items to this pin // we must also select connected items to this pin
// and mainly wires
AddPickedItem( screen, pos ); AddPickedItem( screen, pos );
} }
pin = GetNextPinPosition( (SCH_COMPONENT*) Struct, pos, false ); pin = GetNextPinPosition( (SCH_COMPONENT*) Struct, pos, pin );
} }
} }
@ -774,7 +779,6 @@ static void AddPickedItem( SCH_SCREEN* screen, wxPoint position )
{ {
Struct->m_Flags = SELECTED | ENDPOINT | STARTPOINT; Struct->m_Flags = SELECTED | ENDPOINT | STARTPOINT;
Struct->m_Flags &= ~STARTPOINT; Struct->m_Flags &= ~STARTPOINT;
// Save m_Flags for Undo/redo drag operations: // Save m_Flags for Undo/redo drag operations:
picker.m_PickerFlags = Struct->m_Flags; picker.m_PickerFlags = Struct->m_Flags;
pickedlist->PushItem( picker ); pickedlist->PushItem( picker );
@ -783,7 +787,6 @@ static void AddPickedItem( SCH_SCREEN* screen, wxPoint position )
{ {
Struct->m_Flags = SELECTED | ENDPOINT | STARTPOINT; Struct->m_Flags = SELECTED | ENDPOINT | STARTPOINT;
Struct->m_Flags &= ~ENDPOINT; Struct->m_Flags &= ~ENDPOINT;
// Save m_Flags for Undo/redo drag operations: // Save m_Flags for Undo/redo drag operations:
picker.m_PickerFlags = Struct->m_Flags; picker.m_PickerFlags = Struct->m_Flags;
pickedlist->PushItem( picker ); pickedlist->PushItem( picker );
@ -856,53 +859,45 @@ static void AddPickedItem( SCH_SCREEN* screen, wxPoint position )
/** GetNextPinPosition() /** GetNextPinPosition()
* calculate position of the "next" pin of the aDrawLibItem component * calculate position of the "next" pin of the aDrawLibItem component
* @param aDrawLibItem = component to test. * @param aComponent = component to test.
* @param aPosition = the calculated pin position, according to the component * @param aPosition = the calculated pin position, according to the component
* orientation and position * orientation and position
* @param aSearchFirst = if true, search for the first pin * @param aSearchFirst = if true, search for the first pin
* @return a pointer to the pin * @return a pointer to the pin
*/ */
static LIB_PIN* GetNextPinPosition( SCH_COMPONENT* aDrawLibItem, static LIB_PIN* GetNextPinPosition( SCH_COMPONENT* aComponent,
wxPoint& aPosition, wxPoint& aPosition,
bool aSearchFirst ) LIB_PIN* aPin )
{ {
static LIB_COMPONENT* Entry; static LIB_COMPONENT* Entry;
static int Multi, convert;
TRANSFORM transform;
static wxPoint CmpPosition;
static LIB_PIN* Pin;
if( aSearchFirst ) if( aPin == NULL )
{ {
Entry = CMP_LIBRARY::FindLibraryComponent( aDrawLibItem->GetLibName() ); Entry = CMP_LIBRARY::FindLibraryComponent( aComponent->GetLibName() );
if( Entry == NULL ) if( Entry == NULL )
return NULL; return NULL;
Pin = Entry->GetNextPin();
Multi = aDrawLibItem->GetUnit();
convert = aDrawLibItem->GetConvert();
CmpPosition = aDrawLibItem->m_Pos;
transform = aDrawLibItem->GetTransform();
} }
else
Pin = Entry->GetNextPin( Pin );
for( ; Pin != NULL; Pin = Entry->GetNextPin( Pin ) ) aPin = Entry->GetNextPin( aPin );
int multi = aComponent->GetUnit();
int convert = aComponent->GetConvert();
for( ; aPin != NULL; aPin = Entry->GetNextPin( aPin ) )
{ {
wxASSERT( Pin->Type() == LIB_PIN_T ); wxASSERT( aPin->Type() == LIB_PIN_T );
/* Skip items not used for this part */ /* Skip items not used for this part */
if( Multi && Pin->GetUnit() && ( Pin->GetUnit() != Multi ) ) if( multi && aPin->GetUnit() && ( aPin->GetUnit() != multi ) )
continue; continue;
if( convert && Pin->GetConvert() && ( Pin->GetConvert() != convert ) ) if( convert && aPin->GetConvert() && ( aPin->GetConvert() != convert ) )
continue; continue;
/* Calculate the pin position (according to the component orientation) /* Calculate the pin position (according to the component orientation)
*/ */
aPosition = DefaultTransform.TransformCoordinate( Pin->GetPosition() ) + CmpPosition; aPosition = aComponent->GetPinPhysicalPosition( aPin );
return Pin; return aPin;
} }
return NULL; return NULL;

View File

@ -14,16 +14,18 @@
#include "lib_pin.h" #include "lib_pin.h"
#include "general.h" #include "general.h"
#include "protos.h" #include "protos.h"
#include "sch_bus_entry.h"
#include "sch_items.h" #include "sch_items.h"
#include "sch_line.h"
#include "sch_no_connect.h"
#include "sch_polyline.h"
#include "sch_text.h" #include "sch_text.h"
#include "sch_component.h" #include "sch_component.h"
#include "sch_sheet.h" #include "sch_sheet.h"
/* Routines Locales */ /* Routines Locales */
static void Show_Polyline_in_Ghost( WinEDA_DrawPanel* panel, static void Show_Polyline_in_Ghost( WinEDA_DrawPanel* panel, wxDC* DC, bool erase );
wxDC* DC,
bool erase );
static void AbortCreateNewLine( WinEDA_DrawPanel* Panel, wxDC* DC ); static void AbortCreateNewLine( WinEDA_DrawPanel* Panel, wxDC* DC );
static bool IsTerminalPoint( SCH_SCREEN* screen, const wxPoint& pos, int layer ); static bool IsTerminalPoint( SCH_SCREEN* screen, const wxPoint& pos, int layer );
static bool IsJunctionNeeded( SCH_EDIT_FRAME* frame, wxPoint& pos ); static bool IsJunctionNeeded( SCH_EDIT_FRAME* frame, wxPoint& pos );
@ -172,7 +174,7 @@ void SCH_EDIT_FRAME::BeginSegment( wxDC* DC, int type )
if( g_HVLines ) // We need 2 segments to go from a given start pin to an end point if( g_HVLines ) // We need 2 segments to go from a given start pin to an end point
{ {
nextsegment = newsegment->GenCopy(); nextsegment = new SCH_LINE( *newsegment );
nextsegment->m_Flags = IS_NEW; nextsegment->m_Flags = IS_NEW;
newsegment->SetNext( nextsegment ); newsegment->SetNext( nextsegment );
nextsegment->SetBack( newsegment ); nextsegment->SetBack( newsegment );
@ -220,7 +222,7 @@ void SCH_EDIT_FRAME::BeginSegment( wxDC* DC, int type )
/* Create a new segment, and chain it after the current new segment */ /* Create a new segment, and chain it after the current new segment */
if( nextsegment ) if( nextsegment )
{ {
newsegment = nextsegment->GenCopy(); newsegment = new SCH_LINE( *nextsegment );
nextsegment->m_Start = newsegment->m_End; nextsegment->m_Start = newsegment->m_End;
nextsegment->SetNext( NULL ); nextsegment->SetNext( NULL );
nextsegment->SetBack( newsegment ); nextsegment->SetBack( newsegment );
@ -229,7 +231,7 @@ void SCH_EDIT_FRAME::BeginSegment( wxDC* DC, int type )
} }
else else
{ {
newsegment = oldsegment->GenCopy(); newsegment = new SCH_LINE( *oldsegment );
newsegment->m_Start = oldsegment->m_End; newsegment->m_Start = oldsegment->m_End;
} }
@ -332,6 +334,7 @@ void SCH_EDIT_FRAME::EndSegment( wxDC* DC )
if( !g_ItemToRepeat ) if( !g_ItemToRepeat )
g_ItemToRepeat = segment; g_ItemToRepeat = segment;
} }
segment->m_Flags = 0; segment->m_Flags = 0;
segment = segment->Next(); segment = segment->Next();
} }
@ -372,7 +375,6 @@ void SCH_EDIT_FRAME::EndSegment( wxDC* DC )
item = item->Next(); item = item->Next();
} }
DrawPanel->CursorOn( DC ); // Display schematic cursor DrawPanel->CursorOn( DC ); // Display schematic cursor
SaveCopyInUndoList( s_OldWiresList, UR_WIRE_IMAGE ); SaveCopyInUndoList( s_OldWiresList, UR_WIRE_IMAGE );
@ -442,6 +444,7 @@ static void Show_Polyline_in_Ghost( WinEDA_DrawPanel* panel, wxDC* DC, bool eras
GRSetDrawMode( DC, g_XorMode ); GRSetDrawMode( DC, g_XorMode );
int idx = NewPoly->GetCornerCount() - 1; int idx = NewPoly->GetCornerCount() - 1;
if( g_HVLines ) if( g_HVLines )
{ {
/* Coerce the line to vertical or horizontal one: */ /* Coerce the line to vertical or horizontal one: */
@ -571,111 +574,30 @@ static void AbortCreateNewLine( WinEDA_DrawPanel* Panel, wxDC* DC )
*/ */
void SCH_EDIT_FRAME::RepeatDrawItem( wxDC* DC ) void SCH_EDIT_FRAME::RepeatDrawItem( wxDC* DC )
{ {
wxPoint new_pos;
if( g_ItemToRepeat == NULL ) if( g_ItemToRepeat == NULL )
return; return;
switch( g_ItemToRepeat->Type() ) g_ItemToRepeat = g_ItemToRepeat->Clone();
if( g_ItemToRepeat->Type() == SCH_COMPONENT_T ) // If repeat component then put in move mode
{ {
case SCH_JUNCTION_T: wxPoint pos = GetScreen()->m_Curseur - ( (SCH_COMPONENT*) g_ItemToRepeat )->m_Pos;
#undef STRUCT g_ItemToRepeat->m_Flags = IS_NEW;
#define STRUCT ( (SCH_JUNCTION*) g_ItemToRepeat ) ( (SCH_COMPONENT*) g_ItemToRepeat )->m_TimeStamp = GetTimeStamp();
g_ItemToRepeat = STRUCT->GenCopy(); g_ItemToRepeat->Move( pos );
STRUCT->m_Pos += g_RepeatStep; RedrawOneStruct( DrawPanel, DC, g_ItemToRepeat, g_XorMode );
new_pos = STRUCT->m_Pos; StartMovePart( (SCH_COMPONENT*) g_ItemToRepeat, DC );
break; return;
case SCH_NO_CONNECT_T:
#undef STRUCT
#define STRUCT ( (SCH_NO_CONNECT*) g_ItemToRepeat )
g_ItemToRepeat = STRUCT->GenCopy();
STRUCT->m_Pos += g_RepeatStep;
new_pos = STRUCT->m_Pos;
break;
case SCH_TEXT_T:
#undef STRUCT
#define STRUCT ( (SCH_TEXT*) g_ItemToRepeat )
g_ItemToRepeat = STRUCT->GenCopy();
STRUCT->m_Pos += g_RepeatStep;
new_pos = STRUCT->m_Pos;
IncrementLabelMember( STRUCT->m_Text );
break;
case SCH_LABEL_T:
#undef STRUCT
#define STRUCT ( (SCH_LABEL*) g_ItemToRepeat )
g_ItemToRepeat = STRUCT->GenCopy();
STRUCT->m_Pos += g_RepeatStep;
new_pos = STRUCT->m_Pos;
IncrementLabelMember( STRUCT->m_Text );
break;
case SCH_HIERARCHICAL_LABEL_T:
#undef STRUCT
#define STRUCT ( (SCH_HIERLABEL*) g_ItemToRepeat )
g_ItemToRepeat = STRUCT->GenCopy();
STRUCT->m_Pos += g_RepeatStep;
new_pos = STRUCT->m_Pos;
IncrementLabelMember( STRUCT->m_Text );
break;
case SCH_GLOBAL_LABEL_T:
#undef STRUCT
#define STRUCT ( (SCH_GLOBALLABEL*) g_ItemToRepeat )
g_ItemToRepeat = STRUCT->GenCopy();
STRUCT->m_Pos += g_RepeatStep;
new_pos = STRUCT->m_Pos;
IncrementLabelMember( STRUCT->m_Text );
break;
case SCH_LINE_T:
#undef STRUCT
#define STRUCT ( (SCH_LINE*) g_ItemToRepeat )
g_ItemToRepeat = STRUCT->GenCopy();
STRUCT->m_Start += g_RepeatStep;
new_pos = STRUCT->m_Start;
STRUCT->m_End += g_RepeatStep;
break;
case SCH_BUS_ENTRY_T:
#undef STRUCT
#define STRUCT ( (SCH_BUS_ENTRY*) g_ItemToRepeat )
g_ItemToRepeat = STRUCT->GenCopy();
STRUCT->m_Pos += g_RepeatStep;
new_pos = STRUCT->m_Pos;
break;
case SCH_COMPONENT_T: // In repeat command the new component is put
// in move mode
#undef STRUCT
#define STRUCT ( (SCH_COMPONENT*) g_ItemToRepeat )
// Create the duplicate component, position = mouse cursor
g_ItemToRepeat = STRUCT->GenCopy();
new_pos.x = GetScreen()->m_Curseur.x - STRUCT->m_Pos.x;
new_pos.y = GetScreen()->m_Curseur.y - STRUCT->m_Pos.y;
STRUCT->m_Pos = GetScreen()->m_Curseur;
STRUCT->m_Flags = IS_NEW;
STRUCT->m_TimeStamp = GetTimeStamp();
for( int ii = 0; ii < STRUCT->GetFieldCount(); ii++ )
{
STRUCT->GetField( ii )->m_Pos += new_pos;
} }
RedrawOneStruct( DrawPanel, DC, STRUCT, g_XorMode ); g_ItemToRepeat->Move( wxPoint( g_RepeatStep.GetWidth(), g_RepeatStep.GetHeight() ) );
StartMovePart( STRUCT, DC );
return;
break;
default: if( g_ItemToRepeat->Type() == SCH_TEXT_T
g_ItemToRepeat = NULL; || g_ItemToRepeat->Type() == SCH_LABEL_T
DisplayError( this, wxT( "Repeat Type Error" ), 10 ); || g_ItemToRepeat->Type() == SCH_HIERARCHICAL_LABEL_T
break; || g_ItemToRepeat->Type() == SCH_GLOBAL_LABEL_T )
{
( (SCH_TEXT*) g_ItemToRepeat )->IncrementLabel();
} }
if( g_ItemToRepeat ) if( g_ItemToRepeat )
@ -686,9 +608,6 @@ void SCH_EDIT_FRAME::RepeatDrawItem( wxDC* DC )
RedrawOneStruct( DrawPanel, DC, g_ItemToRepeat, GR_DEFAULT_DRAWMODE ); RedrawOneStruct( DrawPanel, DC, g_ItemToRepeat, GR_DEFAULT_DRAWMODE );
SaveCopyInUndoList( g_ItemToRepeat, UR_NEW ); SaveCopyInUndoList( g_ItemToRepeat, UR_NEW );
g_ItemToRepeat->m_Flags = 0; g_ItemToRepeat->m_Flags = 0;
// GetScreen()->Curseur = new_pos;
// DrawPanel->MouseTo( DrawPanel->CursorScreenPosition() );
} }
} }
@ -702,6 +621,7 @@ void IncrementLabelMember( wxString& name )
long number = 0; long number = 0;
ii = name.Len() - 1; nn = 0; ii = name.Len() - 1; nn = 0;
if( !isdigit( name.GetChar( ii ) ) ) if( !isdigit( name.GetChar( ii ) ) )
return; return;
@ -712,6 +632,7 @@ void IncrementLabelMember( wxString& name )
ii++; /* digits are starting at ii position */ ii++; /* digits are starting at ii position */
wxString litt_number = name.Right( nn ); wxString litt_number = name.Right( nn );
if( litt_number.ToLong( &number ) ) if( litt_number.ToLong( &number ) )
{ {
number += g_RepeatDeltaLabel; number += g_RepeatDeltaLabel;
@ -778,11 +699,13 @@ static bool IsTerminalPoint( SCH_SCREEN* screen, const wxPoint& pos, int layer )
itempos = LibItem->GetScreenCoord( pin->GetPosition() ); itempos = LibItem->GetScreenCoord( pin->GetPosition() );
itempos.x += LibItem->m_Pos.x; itempos.x += LibItem->m_Pos.x;
itempos.y += LibItem->m_Pos.y; itempos.y += LibItem->m_Pos.y;
if( ( itempos.x == pos.x ) && ( itempos.y == pos.y ) ) if( ( itempos.x == pos.x ) && ( itempos.y == pos.y ) )
return TRUE; return TRUE;
} }
item = PickStruct( pos, screen, WIREITEM ); item = PickStruct( pos, screen, WIREITEM );
if( item ) if( item )
return TRUE; return TRUE;

View File

@ -13,7 +13,7 @@
#include "general.h" #include "general.h"
#include "protos.h" #include "protos.h"
#include "sch_items.h" #include "sch_bus_entry.h"
static int s_LastShape = '\\'; static int s_LastShape = '\\';
@ -85,7 +85,7 @@ void SCH_EDIT_FRAME::StartMoveBusEntry( SCH_BUS_ENTRY* BusEntry, wxDC* DC )
if( (BusEntry->m_Flags & IS_NEW) == 0 ) // not already in edit, save shape if( (BusEntry->m_Flags & IS_NEW) == 0 ) // not already in edit, save shape
{ {
delete g_ItemToUndoCopy; delete g_ItemToUndoCopy;
g_ItemToUndoCopy = BusEntry->GenCopy(); g_ItemToUndoCopy = BusEntry->Clone();
} }
BusEntry->m_Flags |= IS_MOVED; BusEntry->m_Flags |= IS_MOVED;

View File

@ -12,7 +12,9 @@
#include "general.h" #include "general.h"
#include "protos.h" #include "protos.h"
#include "netlist.h" #include "netlist.h"
#include "sch_bus_entry.h"
#include "sch_items.h" #include "sch_items.h"
#include "sch_line.h"
/* Routine to start/end segment (BUS or wires) on junctions. /* Routine to start/end segment (BUS or wires) on junctions.
@ -91,11 +93,11 @@ void BreakSegment( SCH_SCREEN* aScreen, wxPoint aBreakpoint )
* Segment connecte: doit etre coupe en 2 si px,py * Segment connecte: doit etre coupe en 2 si px,py
* n'est * n'est
* pas une extremite */ * pas une extremite */
if( ( segment->m_Start == aBreakpoint ) if( ( segment->m_Start == aBreakpoint ) || ( segment->m_End == aBreakpoint ) )
|| ( segment->m_End == aBreakpoint ) )
continue; continue;
/* Here we must cut the segment into 2. */ /* Here we must cut the segment into 2. */
NewSegment = segment->GenCopy(); NewSegment = new SCH_LINE( *segment );
NewSegment->m_Start = aBreakpoint; NewSegment->m_Start = aBreakpoint;
segment->m_End = NewSegment->m_Start; segment->m_End = NewSegment->m_Start;
NewSegment->SetNext( segment->Next() ); NewSegment->SetNext( segment->Next() );

View File

@ -12,6 +12,7 @@
#include "protos.h" #include "protos.h"
#include "sch_marker.h" #include "sch_marker.h"
#include "sch_items.h" #include "sch_items.h"
#include "sch_line.h"
#include "sch_sheet.h" #include "sch_sheet.h"
#include "sch_text.h" #include "sch_text.h"

View File

@ -297,7 +297,7 @@ void DIALOG_COLOR_CONFIG::UpdateLayerSettings()
} }
void DIALOG_COLOR_CONFIG::OnOkClick( wxCommandEvent& WXUNUSED( event ) ) void DIALOG_COLOR_CONFIG::OnOkClick( wxCommandEvent& event )
{ {
UpdateLayerSettings(); UpdateLayerSettings();
m_Parent->DrawPanel->Refresh(); m_Parent->DrawPanel->Refresh();
@ -305,13 +305,13 @@ void DIALOG_COLOR_CONFIG::OnOkClick( wxCommandEvent& WXUNUSED( event ) )
} }
void DIALOG_COLOR_CONFIG::OnCancelClick( wxCommandEvent& WXUNUSED( event ) ) void DIALOG_COLOR_CONFIG::OnCancelClick( wxCommandEvent& event )
{ {
EndModal( -1 ); EndModal( -1 );
} }
void DIALOG_COLOR_CONFIG::OnApplyClick( wxCommandEvent& WXUNUSED( event ) ) void DIALOG_COLOR_CONFIG::OnApplyClick( wxCommandEvent& event )
{ {
UpdateLayerSettings(); UpdateLayerSettings();
m_Parent->DrawPanel->Refresh(); m_Parent->DrawPanel->Refresh();

View File

@ -239,7 +239,7 @@ void DIALOG_EDIT_COMPONENT_IN_LIBRARY::OnOkClick( wxCommandEvent& event )
} }
void DIALOG_EDIT_COMPONENT_IN_LIBRARY::CopyDocToAlias( wxCommandEvent& WXUNUSED (event) ) void DIALOG_EDIT_COMPONENT_IN_LIBRARY::CopyDocToAlias( wxCommandEvent& event )
{ {
if( m_Parent == NULL ) if( m_Parent == NULL )
return; return;
@ -261,7 +261,7 @@ void DIALOG_EDIT_COMPONENT_IN_LIBRARY::CopyDocToAlias( wxCommandEvent& WXUNUSED
} }
void DIALOG_EDIT_COMPONENT_IN_LIBRARY::DeleteAllAliasOfPart( wxCommandEvent& WXUNUSED (event) ) void DIALOG_EDIT_COMPONENT_IN_LIBRARY::DeleteAllAliasOfPart( wxCommandEvent& event )
{ {
if( m_PartAliasListCtrl->FindString( m_Parent->GetAliasName() ) != wxNOT_FOUND ) if( m_PartAliasListCtrl->FindString( m_Parent->GetAliasName() ) != wxNOT_FOUND )
{ {
@ -284,7 +284,7 @@ void DIALOG_EDIT_COMPONENT_IN_LIBRARY::DeleteAllAliasOfPart( wxCommandEvent& WXU
/* Add a new name to the alias list box /* Add a new name to the alias list box
* New name cannot be the root name, and must not exists * New name cannot be the root name, and must not exists
*/ */
void DIALOG_EDIT_COMPONENT_IN_LIBRARY::AddAliasOfPart( wxCommandEvent& WXUNUSED (event) ) void DIALOG_EDIT_COMPONENT_IN_LIBRARY::AddAliasOfPart( wxCommandEvent& event )
{ {
wxString aliasname; wxString aliasname;
LIB_COMPONENT* component = m_Parent->GetComponent(); LIB_COMPONENT* component = m_Parent->GetComponent();
@ -324,7 +324,7 @@ void DIALOG_EDIT_COMPONENT_IN_LIBRARY::AddAliasOfPart( wxCommandEvent& WXUNUSED
} }
void DIALOG_EDIT_COMPONENT_IN_LIBRARY::DeleteAliasOfPart( wxCommandEvent& WXUNUSED (event) ) void DIALOG_EDIT_COMPONENT_IN_LIBRARY::DeleteAliasOfPart( wxCommandEvent& event )
{ {
wxString aliasname = m_PartAliasListCtrl->GetStringSelection(); wxString aliasname = m_PartAliasListCtrl->GetStringSelection();
@ -444,7 +444,7 @@ void DIALOG_EDIT_COMPONENT_IN_LIBRARY::BrowseAndSelectDocFile( wxCommandEvent& e
} }
void DIALOG_EDIT_COMPONENT_IN_LIBRARY::DeleteAllFootprintFilter( wxCommandEvent& WXUNUSED (event) ) void DIALOG_EDIT_COMPONENT_IN_LIBRARY::DeleteAllFootprintFilter( wxCommandEvent& event )
{ {
if( IsOK( this, _( "Ok to Delete FootprintFilter LIST" ) ) ) if( IsOK( this, _( "Ok to Delete FootprintFilter LIST" ) ) )
{ {
@ -458,7 +458,7 @@ void DIALOG_EDIT_COMPONENT_IN_LIBRARY::DeleteAllFootprintFilter( wxCommandEvent&
/* Add a new name to the footprint filter list box /* Add a new name to the footprint filter list box
* Obvioulsy, cannot be void * Obvioulsy, cannot be void
*/ */
void DIALOG_EDIT_COMPONENT_IN_LIBRARY::AddFootprintFilter( wxCommandEvent& WXUNUSED (event) ) void DIALOG_EDIT_COMPONENT_IN_LIBRARY::AddFootprintFilter( wxCommandEvent& event )
{ {
wxString Line; wxString Line;
LIB_COMPONENT* component = m_Parent->GetComponent(); LIB_COMPONENT* component = m_Parent->GetComponent();
@ -494,7 +494,7 @@ void DIALOG_EDIT_COMPONENT_IN_LIBRARY::AddFootprintFilter( wxCommandEvent& WXUNU
} }
void DIALOG_EDIT_COMPONENT_IN_LIBRARY::DeleteOneFootprintFilter( wxCommandEvent& WXUNUSED( event ) ) void DIALOG_EDIT_COMPONENT_IN_LIBRARY::DeleteOneFootprintFilter( wxCommandEvent& event )
{ {
LIB_COMPONENT* component = m_Parent->GetComponent(); LIB_COMPONENT* component = m_Parent->GetComponent();
int ii = m_FootprintFilterListBox->GetSelection(); int ii = m_FootprintFilterListBox->GetSelection();

View File

@ -578,6 +578,22 @@ void DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::copySelectedFieldToPanel()
m_StyleRadioBox->SetSelection( style ); m_StyleRadioBox->SetSelection( style );
// Select the right text justification
if( field.m_HJustify == GR_TEXT_HJUSTIFY_LEFT )
m_FieldHJustifyCtrl->SetSelection(0);
else if( field.m_HJustify == GR_TEXT_HJUSTIFY_RIGHT )
m_FieldHJustifyCtrl->SetSelection(2);
else
m_FieldHJustifyCtrl->SetSelection(1);
if( field.m_VJustify == GR_TEXT_VJUSTIFY_BOTTOM )
m_FieldVJustifyCtrl->SetSelection(0);
else if( field.m_VJustify == GR_TEXT_VJUSTIFY_TOP )
m_FieldVJustifyCtrl->SetSelection(2);
else
m_FieldVJustifyCtrl->SetSelection(1);
fieldNameTextCtrl->SetValue( field.m_Name ); fieldNameTextCtrl->SetValue( field.m_Name );
// the names of the fixed fields are not editable, others are. // the names of the fixed fields are not editable, others are.
@ -657,6 +673,19 @@ bool DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::copyPanelToSelectedField()
rotateCheckBox->SetValue( field.m_Orient == TEXT_ORIENT_VERT ); rotateCheckBox->SetValue( field.m_Orient == TEXT_ORIENT_VERT );
// Copy the text justification
GRTextHorizJustifyType hjustify[3] = {
GR_TEXT_HJUSTIFY_LEFT, GR_TEXT_HJUSTIFY_CENTER,
GR_TEXT_HJUSTIFY_RIGHT
};
GRTextVertJustifyType vjustify[3] = {
GR_TEXT_VJUSTIFY_BOTTOM, GR_TEXT_VJUSTIFY_CENTER,
GR_TEXT_VJUSTIFY_TOP
};
field.m_HJustify = hjustify[m_FieldHJustifyCtrl->GetSelection()];
field.m_VJustify = vjustify[m_FieldVJustifyCtrl->GetSelection()];
field.m_Name = fieldNameTextCtrl->GetValue(); field.m_Name = fieldNameTextCtrl->GetValue();
/* Void fields texts for REFERENCE and VALUE (value is the name of the /* Void fields texts for REFERENCE and VALUE (value is the name of the

View File

@ -1,5 +1,5 @@
/////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////
// C++ code generated with wxFormBuilder (version Apr 16 2008) // C++ code generated with wxFormBuilder (version Sep 8 2010)
// http://www.wxformbuilder.org/ // http://www.wxformbuilder.org/
// //
// PLEASE DO "NOT" EDIT THIS FILE! // PLEASE DO "NOT" EDIT THIS FILE!
@ -29,7 +29,7 @@ DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_FBP::DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_FBP(
int unitChoiceNChoices = sizeof( unitChoiceChoices ) / sizeof( wxString ); int unitChoiceNChoices = sizeof( unitChoiceChoices ) / sizeof( wxString );
unitChoice = new wxChoice( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, unitChoiceNChoices, unitChoiceChoices, 0 ); unitChoice = new wxChoice( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, unitChoiceNChoices, unitChoiceChoices, 0 );
unitChoice->SetSelection( 0 ); unitChoice->SetSelection( 0 );
unitSizer->Add( unitChoice, 1, wxALL|wxEXPAND, 5 ); unitSizer->Add( unitChoice, 0, wxALL|wxEXPAND, 5 );
optionsSizer->Add( unitSizer, 0, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 8 ); optionsSizer->Add( unitSizer, 0, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 8 );
@ -42,9 +42,9 @@ DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_FBP::DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_FBP(
orientationRadioBox->SetSelection( 0 ); orientationRadioBox->SetSelection( 0 );
orientationRadioBox->SetToolTip( _("Select if the component is to be rotated when drawn") ); orientationRadioBox->SetToolTip( _("Select if the component is to be rotated when drawn") );
orientationSizer->Add( orientationRadioBox, 1, wxALL, 8 ); orientationSizer->Add( orientationRadioBox, 1, wxALL|wxEXPAND, 8 );
optionsSizer->Add( orientationSizer, 0, wxEXPAND|wxLEFT|wxRIGHT|wxTOP, 0 ); optionsSizer->Add( orientationSizer, 0, wxLEFT|wxRIGHT|wxTOP|wxEXPAND, 0 );
wxBoxSizer* mirrorSizer; wxBoxSizer* mirrorSizer;
mirrorSizer = new wxBoxSizer( wxHORIZONTAL ); mirrorSizer = new wxBoxSizer( wxHORIZONTAL );
@ -57,7 +57,7 @@ DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_FBP::DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_FBP(
mirrorSizer->Add( mirrorRadioBox, 1, wxALL, 8 ); mirrorSizer->Add( mirrorRadioBox, 1, wxALL, 8 );
optionsSizer->Add( mirrorSizer, 0, wxEXPAND|wxLEFT|wxRIGHT|wxTOP, 0 ); optionsSizer->Add( mirrorSizer, 0, wxLEFT|wxRIGHT|wxTOP|wxEXPAND, 0 );
wxStaticBoxSizer* chipnameSizer; wxStaticBoxSizer* chipnameSizer;
chipnameSizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Chip Name") ), wxHORIZONTAL ); chipnameSizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Chip Name") ), wxHORIZONTAL );
@ -71,7 +71,6 @@ DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_FBP::DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_FBP(
optionsSizer->Add( chipnameSizer, 0, wxEXPAND|wxLEFT|wxRIGHT|wxTOP, 8 ); optionsSizer->Add( chipnameSizer, 0, wxEXPAND|wxLEFT|wxRIGHT|wxTOP, 8 );
convertCheckBox = new wxCheckBox( this, wxID_ANY, _("Convert"), wxDefaultPosition, wxDefaultSize, 0 ); convertCheckBox = new wxCheckBox( this, wxID_ANY, _("Convert"), wxDefaultPosition, wxDefaultSize, 0 );
convertCheckBox->SetToolTip( _("Use the alternate shape of this component.\nFor gates, this is the \"De Morgan\" conversion") ); convertCheckBox->SetToolTip( _("Use the alternate shape of this component.\nFor gates, this is the \"De Morgan\" conversion") );
optionsSizer->Add( convertCheckBox, 0, wxALL, 8 ); optionsSizer->Add( convertCheckBox, 0, wxALL, 8 );
@ -113,11 +112,28 @@ DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_FBP::DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_FBP(
gridStaticBoxSizer->Add( moveUpButton, 0, wxALL|wxEXPAND, 5 ); gridStaticBoxSizer->Add( moveUpButton, 0, wxALL|wxEXPAND, 5 );
fieldsSizer->Add( gridStaticBoxSizer, 5, wxALL|wxEXPAND, 8 ); fieldsSizer->Add( gridStaticBoxSizer, 5, wxEXPAND|wxRIGHT|wxLEFT, 8 );
wxBoxSizer* fieldEditBoxSizer; wxBoxSizer* fieldEditBoxSizer;
fieldEditBoxSizer = new wxBoxSizer( wxVERTICAL ); fieldEditBoxSizer = new wxBoxSizer( wxVERTICAL );
wxStaticBoxSizer* sbSizerOptions;
sbSizerOptions = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Options") ), wxHORIZONTAL );
wxString m_FieldHJustifyCtrlChoices[] = { _("Align left"), _("Align center"), _("Align right") };
int m_FieldHJustifyCtrlNChoices = sizeof( m_FieldHJustifyCtrlChoices ) / sizeof( wxString );
m_FieldHJustifyCtrl = new wxRadioBox( this, wxID_ANY, _("Horiz. Justify"), wxDefaultPosition, wxDefaultSize, m_FieldHJustifyCtrlNChoices, m_FieldHJustifyCtrlChoices, 1, wxRA_SPECIFY_COLS );
m_FieldHJustifyCtrl->SetSelection( 1 );
sbSizerOptions->Add( m_FieldHJustifyCtrl, 1, wxRIGHT|wxLEFT, 5 );
wxString m_FieldVJustifyCtrlChoices[] = { _("Align bottom"), _("Align center"), _("Align top") };
int m_FieldVJustifyCtrlNChoices = sizeof( m_FieldVJustifyCtrlChoices ) / sizeof( wxString );
m_FieldVJustifyCtrl = new wxRadioBox( this, wxID_ANY, _("Vert. Justify"), wxDefaultPosition, wxDefaultSize, m_FieldVJustifyCtrlNChoices, m_FieldVJustifyCtrlChoices, 1, wxRA_SPECIFY_COLS );
m_FieldVJustifyCtrl->SetSelection( 1 );
sbSizerOptions->Add( m_FieldVJustifyCtrl, 1, wxRIGHT|wxLEFT, 5 );
fieldEditBoxSizer->Add( sbSizerOptions, 0, wxEXPAND, 5 );
wxStaticBoxSizer* visibilitySizer; wxStaticBoxSizer* visibilitySizer;
visibilitySizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Visibility") ), wxHORIZONTAL ); visibilitySizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Visibility") ), wxHORIZONTAL );
@ -125,13 +141,11 @@ DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_FBP::DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_FBP(
bShowRotateSizer = new wxBoxSizer( wxVERTICAL ); bShowRotateSizer = new wxBoxSizer( wxVERTICAL );
showCheckBox = new wxCheckBox( this, wxID_ANY, _("Show"), wxDefaultPosition, wxDefaultSize, 0 ); showCheckBox = new wxCheckBox( this, wxID_ANY, _("Show"), wxDefaultPosition, wxDefaultSize, 0 );
showCheckBox->SetToolTip( _("Check if you want this field visible") ); showCheckBox->SetToolTip( _("Check if you want this field visible") );
bShowRotateSizer->Add( showCheckBox, 0, wxALL, 5 ); bShowRotateSizer->Add( showCheckBox, 0, wxALL, 5 );
rotateCheckBox = new wxCheckBox( this, wxID_ANY, _("Rotate"), wxDefaultPosition, wxDefaultSize, 0 ); rotateCheckBox = new wxCheckBox( this, wxID_ANY, _("Rotate"), wxDefaultPosition, wxDefaultSize, 0 );
rotateCheckBox->SetToolTip( _("Check if you want this field's text rotated 90 degrees") ); rotateCheckBox->SetToolTip( _("Check if you want this field's text rotated 90 degrees") );
bShowRotateSizer->Add( rotateCheckBox, 0, wxALL, 5 ); bShowRotateSizer->Add( rotateCheckBox, 0, wxALL, 5 );
@ -146,7 +160,7 @@ DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_FBP::DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_FBP(
visibilitySizer->Add( m_StyleRadioBox, 1, wxBOTTOM|wxRIGHT|wxLEFT, 5 ); visibilitySizer->Add( m_StyleRadioBox, 1, wxBOTTOM|wxRIGHT|wxLEFT, 5 );
fieldEditBoxSizer->Add( visibilitySizer, 0, wxEXPAND, 5 ); fieldEditBoxSizer->Add( visibilitySizer, 0, wxEXPAND|wxTOP, 5 );
wxBoxSizer* fieldNameBoxSizer; wxBoxSizer* fieldNameBoxSizer;
fieldNameBoxSizer = new wxBoxSizer( wxVERTICAL ); fieldNameBoxSizer = new wxBoxSizer( wxVERTICAL );
@ -221,15 +235,9 @@ DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_FBP::DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_FBP(
positionBoxSizer->Add( posYBoxSizer, 1, wxALL|wxEXPAND, 5 ); positionBoxSizer->Add( posYBoxSizer, 1, wxALL|wxEXPAND, 5 );
fieldEditBoxSizer->Add( positionBoxSizer, 1, wxEXPAND, 5 ); fieldEditBoxSizer->Add( positionBoxSizer, 0, wxEXPAND, 5 );
fieldsSizer->Add( fieldEditBoxSizer, 0, wxEXPAND, 5 );
fieldEditBoxSizer->Add( 0, 0, 1, wxEXPAND, 5 );
fieldEditBoxSizer->Add( 0, 0, 1, wxEXPAND, 5 );
fieldsSizer->Add( fieldEditBoxSizer, 3, wxEXPAND, 5 );
upperSizer->Add( fieldsSizer, 1, wxALL|wxEXPAND, 5 ); upperSizer->Add( fieldsSizer, 1, wxALL|wxEXPAND, 5 );
@ -268,4 +276,5 @@ DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_FBP::~DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_FBP(
moveUpButton->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_FBP::moveUpButtonHandler ), NULL, this ); moveUpButton->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_FBP::moveUpButtonHandler ), NULL, this );
stdDialogButtonSizerCancel->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_FBP::OnCancelButtonClick ), NULL, this ); stdDialogButtonSizerCancel->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_FBP::OnCancelButtonClick ), NULL, this );
stdDialogButtonSizerOK->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_FBP::OnOKButtonClick ), NULL, this ); stdDialogButtonSizerOK->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_FBP::OnOKButtonClick ), NULL, this );
} }

View File

@ -1,10 +1,12 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> <?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<wxFormBuilder_Project> <wxFormBuilder_Project>
<FileVersion major="1" minor="9" /> <FileVersion major="1" minor="10" />
<object class="Project" expanded="1"> <object class="Project" expanded="1">
<property name="class_decoration">; </property> <property name="class_decoration">; </property>
<property name="code_generation">C++</property> <property name="code_generation">C++</property>
<property name="disconnect_events">1</property> <property name="disconnect_events">1</property>
<property name="disconnect_mode">source_name</property>
<property name="disconnect_python_events">0</property>
<property name="encoding">ANSI</property> <property name="encoding">ANSI</property>
<property name="event_generation">connect</property> <property name="event_generation">connect</property>
<property name="file">dialog_edit_component_in_schematic_fbp</property> <property name="file">dialog_edit_component_in_schematic_fbp</property>
@ -16,13 +18,16 @@
<property name="path">.</property> <property name="path">.</property>
<property name="precompiled_header"></property> <property name="precompiled_header"></property>
<property name="relative_path">1</property> <property name="relative_path">1</property>
<property name="skip_python_events">1</property>
<property name="use_enum">0</property> <property name="use_enum">0</property>
<property name="use_microsoft_bom">0</property> <property name="use_microsoft_bom">0</property>
<object class="Dialog" expanded="1"> <object class="Dialog" expanded="1">
<property name="bg"></property> <property name="bg"></property>
<property name="center"></property> <property name="center"></property>
<property name="context_help"></property> <property name="context_help"></property>
<property name="context_menu">1</property>
<property name="enabled">1</property> <property name="enabled">1</property>
<property name="event_handler">impl_virtual</property>
<property name="extra_style"></property> <property name="extra_style"></property>
<property name="fg"></property> <property name="fg"></property>
<property name="font"></property> <property name="font"></property>
@ -32,11 +37,15 @@
<property name="minimum_size"></property> <property name="minimum_size"></property>
<property name="name">DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_FBP</property> <property name="name">DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_FBP</property>
<property name="pos"></property> <property name="pos"></property>
<property name="size">630,520</property> <property name="size">715,520</property>
<property name="style">wxCAPTION|wxCLOSE_BOX|wxDEFAULT_DIALOG_STYLE|wxMAXIMIZE_BOX|wxMINIMIZE_BOX|wxRESIZE_BORDER|wxSYSTEM_MENU</property> <property name="style">wxCAPTION|wxCLOSE_BOX|wxDEFAULT_DIALOG_STYLE|wxMAXIMIZE_BOX|wxMINIMIZE_BOX|wxRESIZE_BORDER|wxSYSTEM_MENU</property>
<property name="subclass"></property> <property name="subclass"></property>
<property name="title">Component Properties</property> <property name="title">Component Properties</property>
<property name="tooltip"></property> <property name="tooltip"></property>
<property name="validator_data_type"></property>
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
<property name="validator_variable"></property>
<property name="window_extra_style"></property> <property name="window_extra_style"></property>
<property name="window_name"></property> <property name="window_name"></property>
<property name="window_style"></property> <property name="window_style"></property>
@ -111,11 +120,12 @@
<object class="sizeritem" expanded="1"> <object class="sizeritem" expanded="1">
<property name="border">5</property> <property name="border">5</property>
<property name="flag">wxALL|wxEXPAND</property> <property name="flag">wxALL|wxEXPAND</property>
<property name="proportion">1</property> <property name="proportion">0</property>
<object class="wxChoice" expanded="1"> <object class="wxChoice" expanded="1">
<property name="bg"></property> <property name="bg"></property>
<property name="choices">&quot;1&quot; &quot;2&quot; &quot;3&quot; &quot;4&quot; &quot;5&quot; &quot;6&quot; &quot;7&quot; &quot;8&quot; &quot;9&quot; &quot;10&quot; &quot;11&quot; &quot;12&quot; &quot;13&quot; &quot;14&quot; &quot;15&quot; &quot;16&quot; &quot;17&quot; &quot;18&quot; &quot;19&quot; &quot;20&quot; &quot;21&quot; &quot;22&quot; &quot;23&quot; &quot;24&quot; &quot;25&quot; &quot;26&quot;</property> <property name="choices">&quot;1&quot; &quot;2&quot; &quot;3&quot; &quot;4&quot; &quot;5&quot; &quot;6&quot; &quot;7&quot; &quot;8&quot; &quot;9&quot; &quot;10&quot; &quot;11&quot; &quot;12&quot; &quot;13&quot; &quot;14&quot; &quot;15&quot; &quot;16&quot; &quot;17&quot; &quot;18&quot; &quot;19&quot; &quot;20&quot; &quot;21&quot; &quot;22&quot; &quot;23&quot; &quot;24&quot; &quot;25&quot; &quot;26&quot;</property>
<property name="context_help"></property> <property name="context_help"></property>
<property name="context_menu">1</property>
<property name="enabled">1</property> <property name="enabled">1</property>
<property name="fg"></property> <property name="fg"></property>
<property name="font"></property> <property name="font"></property>
@ -130,6 +140,10 @@
<property name="size"></property> <property name="size"></property>
<property name="subclass"></property> <property name="subclass"></property>
<property name="tooltip"></property> <property name="tooltip"></property>
<property name="validator_data_type"></property>
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
<property name="validator_variable"></property>
<property name="window_extra_style"></property> <property name="window_extra_style"></property>
<property name="window_name"></property> <property name="window_name"></property>
<property name="window_style"></property> <property name="window_style"></property>
@ -163,7 +177,7 @@
</object> </object>
<object class="sizeritem" expanded="1"> <object class="sizeritem" expanded="1">
<property name="border">0</property> <property name="border">0</property>
<property name="flag">wxEXPAND|wxLEFT|wxRIGHT|wxTOP</property> <property name="flag">wxLEFT|wxRIGHT|wxTOP|wxEXPAND</property>
<property name="proportion">0</property> <property name="proportion">0</property>
<object class="wxBoxSizer" expanded="1"> <object class="wxBoxSizer" expanded="1">
<property name="minimum_size"></property> <property name="minimum_size"></property>
@ -172,12 +186,13 @@
<property name="permission">none</property> <property name="permission">none</property>
<object class="sizeritem" expanded="1"> <object class="sizeritem" expanded="1">
<property name="border">8</property> <property name="border">8</property>
<property name="flag">wxALL</property> <property name="flag">wxALL|wxEXPAND</property>
<property name="proportion">1</property> <property name="proportion">1</property>
<object class="wxRadioBox" expanded="1"> <object class="wxRadioBox" expanded="1">
<property name="bg"></property> <property name="bg"></property>
<property name="choices">&quot;0&quot; &quot;+90&quot; &quot;180&quot; &quot;-90&quot;</property> <property name="choices">&quot;0&quot; &quot;+90&quot; &quot;180&quot; &quot;-90&quot;</property>
<property name="context_help"></property> <property name="context_help"></property>
<property name="context_menu">1</property>
<property name="enabled">1</property> <property name="enabled">1</property>
<property name="fg"></property> <property name="fg"></property>
<property name="font"></property> <property name="font"></property>
@ -195,6 +210,10 @@
<property name="style">wxRA_SPECIFY_COLS</property> <property name="style">wxRA_SPECIFY_COLS</property>
<property name="subclass"></property> <property name="subclass"></property>
<property name="tooltip">Select if the component is to be rotated when drawn</property> <property name="tooltip">Select if the component is to be rotated when drawn</property>
<property name="validator_data_type"></property>
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
<property name="validator_variable"></property>
<property name="window_extra_style"></property> <property name="window_extra_style"></property>
<property name="window_name"></property> <property name="window_name"></property>
<property name="window_style"></property> <property name="window_style"></property>
@ -228,7 +247,7 @@
</object> </object>
<object class="sizeritem" expanded="1"> <object class="sizeritem" expanded="1">
<property name="border">0</property> <property name="border">0</property>
<property name="flag">wxEXPAND|wxLEFT|wxRIGHT|wxTOP</property> <property name="flag">wxLEFT|wxRIGHT|wxTOP|wxEXPAND</property>
<property name="proportion">0</property> <property name="proportion">0</property>
<object class="wxBoxSizer" expanded="1"> <object class="wxBoxSizer" expanded="1">
<property name="minimum_size"></property> <property name="minimum_size"></property>
@ -243,6 +262,7 @@
<property name="bg"></property> <property name="bg"></property>
<property name="choices">&quot;Normal&quot; &quot;Mirror ---&quot; &quot;Mirror |&quot;</property> <property name="choices">&quot;Normal&quot; &quot;Mirror ---&quot; &quot;Mirror |&quot;</property>
<property name="context_help"></property> <property name="context_help"></property>
<property name="context_menu">1</property>
<property name="enabled">1</property> <property name="enabled">1</property>
<property name="fg"></property> <property name="fg"></property>
<property name="font"></property> <property name="font"></property>
@ -260,6 +280,10 @@
<property name="style">wxRA_SPECIFY_COLS</property> <property name="style">wxRA_SPECIFY_COLS</property>
<property name="subclass"></property> <property name="subclass"></property>
<property name="tooltip">Pick the graphical transformation to be used when displaying the component, if any</property> <property name="tooltip">Pick the graphical transformation to be used when displaying the component, if any</property>
<property name="validator_data_type"></property>
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
<property name="validator_variable"></property>
<property name="window_extra_style"></property> <property name="window_extra_style"></property>
<property name="window_name"></property> <property name="window_name"></property>
<property name="window_style"></property> <property name="window_style"></property>
@ -310,6 +334,7 @@
<object class="wxTextCtrl" expanded="1"> <object class="wxTextCtrl" expanded="1">
<property name="bg"></property> <property name="bg"></property>
<property name="context_help"></property> <property name="context_help"></property>
<property name="context_menu">1</property>
<property name="enabled">1</property> <property name="enabled">1</property>
<property name="fg"></property> <property name="fg"></property>
<property name="font"></property> <property name="font"></property>
@ -325,6 +350,10 @@
<property name="style"></property> <property name="style"></property>
<property name="subclass"></property> <property name="subclass"></property>
<property name="tooltip">The name of the symbol in the library from which this component came</property> <property name="tooltip">The name of the symbol in the library from which this component came</property>
<property name="validator_data_type"></property>
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
<property name="validator_variable"></property>
<property name="value"></property> <property name="value"></property>
<property name="window_extra_style"></property> <property name="window_extra_style"></property>
<property name="window_name"></property> <property name="window_name"></property>
@ -368,6 +397,7 @@
<property name="bg"></property> <property name="bg"></property>
<property name="checked">0</property> <property name="checked">0</property>
<property name="context_help"></property> <property name="context_help"></property>
<property name="context_menu">1</property>
<property name="enabled">1</property> <property name="enabled">1</property>
<property name="fg"></property> <property name="fg"></property>
<property name="font"></property> <property name="font"></property>
@ -383,6 +413,10 @@
<property name="style"></property> <property name="style"></property>
<property name="subclass"></property> <property name="subclass"></property>
<property name="tooltip">Use the alternate shape of this component.&#x0A;For gates, this is the &quot;De Morgan&quot; conversion</property> <property name="tooltip">Use the alternate shape of this component.&#x0A;For gates, this is the &quot;De Morgan&quot; conversion</property>
<property name="validator_data_type"></property>
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
<property name="validator_variable"></property>
<property name="window_extra_style"></property> <property name="window_extra_style"></property>
<property name="window_name"></property> <property name="window_name"></property>
<property name="window_style"></property> <property name="window_style"></property>
@ -419,6 +453,7 @@
<object class="wxStaticText" expanded="1"> <object class="wxStaticText" expanded="1">
<property name="bg"></property> <property name="bg"></property>
<property name="context_help"></property> <property name="context_help"></property>
<property name="context_menu">1</property>
<property name="enabled">1</property> <property name="enabled">1</property>
<property name="fg"></property> <property name="fg"></property>
<property name="font"></property> <property name="font"></property>
@ -434,6 +469,10 @@
<property name="style"></property> <property name="style"></property>
<property name="subclass"></property> <property name="subclass"></property>
<property name="tooltip"></property> <property name="tooltip"></property>
<property name="validator_data_type"></property>
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
<property name="validator_variable"></property>
<property name="window_extra_style"></property> <property name="window_extra_style"></property>
<property name="window_name"></property> <property name="window_name"></property>
<property name="window_style"></property> <property name="window_style"></property>
@ -470,6 +509,7 @@
<object class="wxButton" expanded="1"> <object class="wxButton" expanded="1">
<property name="bg"></property> <property name="bg"></property>
<property name="context_help"></property> <property name="context_help"></property>
<property name="context_menu">1</property>
<property name="default">0</property> <property name="default">0</property>
<property name="enabled">1</property> <property name="enabled">1</property>
<property name="fg"></property> <property name="fg"></property>
@ -486,6 +526,10 @@
<property name="style"></property> <property name="style"></property>
<property name="subclass"></property> <property name="subclass"></property>
<property name="tooltip">Set position and style of fields and component orientation to default lib value.&#x0A;Fields texts are not modified.</property> <property name="tooltip">Set position and style of fields and component orientation to default lib value.&#x0A;Fields texts are not modified.</property>
<property name="validator_data_type"></property>
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
<property name="validator_variable"></property>
<property name="window_extra_style"></property> <property name="window_extra_style"></property>
<property name="window_name"></property> <property name="window_name"></property>
<property name="window_style"></property> <property name="window_style"></property>
@ -531,7 +575,7 @@
<event name="OnUpdateUI"></event> <event name="OnUpdateUI"></event>
<object class="sizeritem" expanded="1"> <object class="sizeritem" expanded="1">
<property name="border">8</property> <property name="border">8</property>
<property name="flag">wxALL|wxEXPAND</property> <property name="flag">wxEXPAND|wxRIGHT|wxLEFT</property>
<property name="proportion">5</property> <property name="proportion">5</property>
<object class="wxStaticBoxSizer" expanded="1"> <object class="wxStaticBoxSizer" expanded="1">
<property name="id">wxID_ANY</property> <property name="id">wxID_ANY</property>
@ -548,6 +592,7 @@
<object class="wxListCtrl" expanded="1"> <object class="wxListCtrl" expanded="1">
<property name="bg"></property> <property name="bg"></property>
<property name="context_help"></property> <property name="context_help"></property>
<property name="context_menu">1</property>
<property name="enabled">1</property> <property name="enabled">1</property>
<property name="fg"></property> <property name="fg"></property>
<property name="font"></property> <property name="font"></property>
@ -562,6 +607,10 @@
<property name="style">wxLC_HRULES|wxLC_REPORT|wxLC_SINGLE_SEL|wxLC_VRULES</property> <property name="style">wxLC_HRULES|wxLC_REPORT|wxLC_SINGLE_SEL|wxLC_VRULES</property>
<property name="subclass"></property> <property name="subclass"></property>
<property name="tooltip"></property> <property name="tooltip"></property>
<property name="validator_data_type"></property>
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
<property name="validator_variable"></property>
<property name="window_extra_style"></property> <property name="window_extra_style"></property>
<property name="window_name"></property> <property name="window_name"></property>
<property name="window_style"></property> <property name="window_style"></property>
@ -617,6 +666,7 @@
<object class="wxButton" expanded="1"> <object class="wxButton" expanded="1">
<property name="bg"></property> <property name="bg"></property>
<property name="context_help"></property> <property name="context_help"></property>
<property name="context_menu">1</property>
<property name="default">0</property> <property name="default">0</property>
<property name="enabled">1</property> <property name="enabled">1</property>
<property name="fg"></property> <property name="fg"></property>
@ -633,6 +683,10 @@
<property name="style"></property> <property name="style"></property>
<property name="subclass"></property> <property name="subclass"></property>
<property name="tooltip">Add a new custom field</property> <property name="tooltip">Add a new custom field</property>
<property name="validator_data_type"></property>
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
<property name="validator_variable"></property>
<property name="window_extra_style"></property> <property name="window_extra_style"></property>
<property name="window_name"></property> <property name="window_name"></property>
<property name="window_style"></property> <property name="window_style"></property>
@ -669,6 +723,7 @@
<object class="wxButton" expanded="1"> <object class="wxButton" expanded="1">
<property name="bg"></property> <property name="bg"></property>
<property name="context_help"></property> <property name="context_help"></property>
<property name="context_menu">1</property>
<property name="default">0</property> <property name="default">0</property>
<property name="enabled">1</property> <property name="enabled">1</property>
<property name="fg"></property> <property name="fg"></property>
@ -685,6 +740,10 @@
<property name="style"></property> <property name="style"></property>
<property name="subclass"></property> <property name="subclass"></property>
<property name="tooltip">Delete one of the optional fields</property> <property name="tooltip">Delete one of the optional fields</property>
<property name="validator_data_type"></property>
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
<property name="validator_variable"></property>
<property name="window_extra_style"></property> <property name="window_extra_style"></property>
<property name="window_name"></property> <property name="window_name"></property>
<property name="window_style"></property> <property name="window_style"></property>
@ -721,6 +780,7 @@
<object class="wxButton" expanded="1"> <object class="wxButton" expanded="1">
<property name="bg"></property> <property name="bg"></property>
<property name="context_help"></property> <property name="context_help"></property>
<property name="context_menu">1</property>
<property name="default">0</property> <property name="default">0</property>
<property name="enabled">1</property> <property name="enabled">1</property>
<property name="fg"></property> <property name="fg"></property>
@ -737,6 +797,10 @@
<property name="style"></property> <property name="style"></property>
<property name="subclass"></property> <property name="subclass"></property>
<property name="tooltip">Move the selected optional fields up one position</property> <property name="tooltip">Move the selected optional fields up one position</property>
<property name="validator_data_type"></property>
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
<property name="validator_variable"></property>
<property name="window_extra_style"></property> <property name="window_extra_style"></property>
<property name="window_name"></property> <property name="window_name"></property>
<property name="window_style"></property> <property name="window_style"></property>
@ -771,7 +835,7 @@
<object class="sizeritem" expanded="1"> <object class="sizeritem" expanded="1">
<property name="border">5</property> <property name="border">5</property>
<property name="flag">wxEXPAND</property> <property name="flag">wxEXPAND</property>
<property name="proportion">3</property> <property name="proportion">0</property>
<object class="wxBoxSizer" expanded="1"> <object class="wxBoxSizer" expanded="1">
<property name="minimum_size"></property> <property name="minimum_size"></property>
<property name="name">fieldEditBoxSizer</property> <property name="name">fieldEditBoxSizer</property>
@ -781,6 +845,138 @@
<property name="border">5</property> <property name="border">5</property>
<property name="flag">wxEXPAND</property> <property name="flag">wxEXPAND</property>
<property name="proportion">0</property> <property name="proportion">0</property>
<object class="wxStaticBoxSizer" expanded="1">
<property name="id">wxID_ANY</property>
<property name="label">Options</property>
<property name="minimum_size"></property>
<property name="name">sbSizerOptions</property>
<property name="orient">wxHORIZONTAL</property>
<property name="permission">none</property>
<event name="OnUpdateUI"></event>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxRIGHT|wxLEFT</property>
<property name="proportion">1</property>
<object class="wxRadioBox" expanded="1">
<property name="bg"></property>
<property name="choices">&quot;Align left&quot; &quot;Align center&quot; &quot;Align right&quot;</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
<property name="enabled">1</property>
<property name="fg"></property>
<property name="font"></property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">Horiz. Justify</property>
<property name="majorDimension">1</property>
<property name="maximum_size"></property>
<property name="minimum_size"></property>
<property name="name">m_FieldHJustifyCtrl</property>
<property name="permission">protected</property>
<property name="pos"></property>
<property name="selection">1</property>
<property name="size"></property>
<property name="style">wxRA_SPECIFY_COLS</property>
<property name="subclass"></property>
<property name="tooltip"></property>
<property name="validator_data_type"></property>
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
<property name="validator_variable"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnChar"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
<event name="OnKeyUp"></event>
<event name="OnKillFocus"></event>
<event name="OnLeaveWindow"></event>
<event name="OnLeftDClick"></event>
<event name="OnLeftDown"></event>
<event name="OnLeftUp"></event>
<event name="OnMiddleDClick"></event>
<event name="OnMiddleDown"></event>
<event name="OnMiddleUp"></event>
<event name="OnMotion"></event>
<event name="OnMouseEvents"></event>
<event name="OnMouseWheel"></event>
<event name="OnPaint"></event>
<event name="OnRadioBox"></event>
<event name="OnRightDClick"></event>
<event name="OnRightDown"></event>
<event name="OnRightUp"></event>
<event name="OnSetFocus"></event>
<event name="OnSize"></event>
<event name="OnUpdateUI"></event>
</object>
</object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxRIGHT|wxLEFT</property>
<property name="proportion">1</property>
<object class="wxRadioBox" expanded="1">
<property name="bg"></property>
<property name="choices">&quot;Align bottom&quot; &quot;Align center&quot; &quot;Align top&quot;</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
<property name="enabled">1</property>
<property name="fg"></property>
<property name="font"></property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">Vert. Justify</property>
<property name="majorDimension">1</property>
<property name="maximum_size"></property>
<property name="minimum_size"></property>
<property name="name">m_FieldVJustifyCtrl</property>
<property name="permission">protected</property>
<property name="pos"></property>
<property name="selection">1</property>
<property name="size"></property>
<property name="style">wxRA_SPECIFY_COLS</property>
<property name="subclass"></property>
<property name="tooltip"></property>
<property name="validator_data_type"></property>
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
<property name="validator_variable"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnChar"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
<event name="OnKeyUp"></event>
<event name="OnKillFocus"></event>
<event name="OnLeaveWindow"></event>
<event name="OnLeftDClick"></event>
<event name="OnLeftDown"></event>
<event name="OnLeftUp"></event>
<event name="OnMiddleDClick"></event>
<event name="OnMiddleDown"></event>
<event name="OnMiddleUp"></event>
<event name="OnMotion"></event>
<event name="OnMouseEvents"></event>
<event name="OnMouseWheel"></event>
<event name="OnPaint"></event>
<event name="OnRadioBox"></event>
<event name="OnRightDClick"></event>
<event name="OnRightDown"></event>
<event name="OnRightUp"></event>
<event name="OnSetFocus"></event>
<event name="OnSize"></event>
<event name="OnUpdateUI"></event>
</object>
</object>
</object>
</object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxEXPAND|wxTOP</property>
<property name="proportion">0</property>
<object class="wxStaticBoxSizer" expanded="1"> <object class="wxStaticBoxSizer" expanded="1">
<property name="id">wxID_ANY</property> <property name="id">wxID_ANY</property>
<property name="label">Visibility</property> <property name="label">Visibility</property>
@ -806,6 +1002,7 @@
<property name="bg"></property> <property name="bg"></property>
<property name="checked">0</property> <property name="checked">0</property>
<property name="context_help"></property> <property name="context_help"></property>
<property name="context_menu">1</property>
<property name="enabled">1</property> <property name="enabled">1</property>
<property name="fg"></property> <property name="fg"></property>
<property name="font"></property> <property name="font"></property>
@ -821,6 +1018,10 @@
<property name="style"></property> <property name="style"></property>
<property name="subclass"></property> <property name="subclass"></property>
<property name="tooltip">Check if you want this field visible</property> <property name="tooltip">Check if you want this field visible</property>
<property name="validator_data_type"></property>
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
<property name="validator_variable"></property>
<property name="window_extra_style"></property> <property name="window_extra_style"></property>
<property name="window_name"></property> <property name="window_name"></property>
<property name="window_style"></property> <property name="window_style"></property>
@ -858,6 +1059,7 @@
<property name="bg"></property> <property name="bg"></property>
<property name="checked">0</property> <property name="checked">0</property>
<property name="context_help"></property> <property name="context_help"></property>
<property name="context_menu">1</property>
<property name="enabled">1</property> <property name="enabled">1</property>
<property name="fg"></property> <property name="fg"></property>
<property name="font"></property> <property name="font"></property>
@ -873,6 +1075,10 @@
<property name="style"></property> <property name="style"></property>
<property name="subclass"></property> <property name="subclass"></property>
<property name="tooltip">Check if you want this field&apos;s text rotated 90 degrees</property> <property name="tooltip">Check if you want this field&apos;s text rotated 90 degrees</property>
<property name="validator_data_type"></property>
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
<property name="validator_variable"></property>
<property name="window_extra_style"></property> <property name="window_extra_style"></property>
<property name="window_name"></property> <property name="window_name"></property>
<property name="window_style"></property> <property name="window_style"></property>
@ -912,6 +1118,7 @@
<property name="bg"></property> <property name="bg"></property>
<property name="choices">&quot;Normal&quot; &quot;Italic&quot; &quot;Bold&quot; &quot;Bold Italic&quot;</property> <property name="choices">&quot;Normal&quot; &quot;Italic&quot; &quot;Bold&quot; &quot;Bold Italic&quot;</property>
<property name="context_help"></property> <property name="context_help"></property>
<property name="context_menu">1</property>
<property name="enabled">1</property> <property name="enabled">1</property>
<property name="fg"></property> <property name="fg"></property>
<property name="font"></property> <property name="font"></property>
@ -929,6 +1136,10 @@
<property name="style">wxRA_SPECIFY_COLS</property> <property name="style">wxRA_SPECIFY_COLS</property>
<property name="subclass"></property> <property name="subclass"></property>
<property name="tooltip">The style of the currently selected field&apos;s text in the schemati</property> <property name="tooltip">The style of the currently selected field&apos;s text in the schemati</property>
<property name="validator_data_type"></property>
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
<property name="validator_variable"></property>
<property name="window_extra_style"></property> <property name="window_extra_style"></property>
<property name="window_name"></property> <property name="window_name"></property>
<property name="window_style"></property> <property name="window_style"></property>
@ -976,6 +1187,7 @@
<object class="wxStaticText" expanded="1"> <object class="wxStaticText" expanded="1">
<property name="bg"></property> <property name="bg"></property>
<property name="context_help"></property> <property name="context_help"></property>
<property name="context_menu">1</property>
<property name="enabled">1</property> <property name="enabled">1</property>
<property name="fg"></property> <property name="fg"></property>
<property name="font"></property> <property name="font"></property>
@ -991,6 +1203,10 @@
<property name="style"></property> <property name="style"></property>
<property name="subclass"></property> <property name="subclass"></property>
<property name="tooltip"></property> <property name="tooltip"></property>
<property name="validator_data_type"></property>
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
<property name="validator_variable"></property>
<property name="window_extra_style"></property> <property name="window_extra_style"></property>
<property name="window_name"></property> <property name="window_name"></property>
<property name="window_style"></property> <property name="window_style"></property>
@ -1027,6 +1243,7 @@
<object class="wxTextCtrl" expanded="1"> <object class="wxTextCtrl" expanded="1">
<property name="bg"></property> <property name="bg"></property>
<property name="context_help"></property> <property name="context_help"></property>
<property name="context_menu">1</property>
<property name="enabled">1</property> <property name="enabled">1</property>
<property name="fg"></property> <property name="fg"></property>
<property name="font"></property> <property name="font"></property>
@ -1042,6 +1259,10 @@
<property name="style"></property> <property name="style"></property>
<property name="subclass"></property> <property name="subclass"></property>
<property name="tooltip">The name of the currently selected field&#x0A;Some fixed fields names are not editable</property> <property name="tooltip">The name of the currently selected field&#x0A;Some fixed fields names are not editable</property>
<property name="validator_data_type"></property>
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
<property name="validator_variable"></property>
<property name="value"></property> <property name="value"></property>
<property name="window_extra_style"></property> <property name="window_extra_style"></property>
<property name="window_name"></property> <property name="window_name"></property>
@ -1093,6 +1314,7 @@
<object class="wxStaticText" expanded="1"> <object class="wxStaticText" expanded="1">
<property name="bg"></property> <property name="bg"></property>
<property name="context_help"></property> <property name="context_help"></property>
<property name="context_menu">1</property>
<property name="enabled">1</property> <property name="enabled">1</property>
<property name="fg"></property> <property name="fg"></property>
<property name="font"></property> <property name="font"></property>
@ -1108,6 +1330,10 @@
<property name="style"></property> <property name="style"></property>
<property name="subclass"></property> <property name="subclass"></property>
<property name="tooltip"></property> <property name="tooltip"></property>
<property name="validator_data_type"></property>
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
<property name="validator_variable"></property>
<property name="window_extra_style"></property> <property name="window_extra_style"></property>
<property name="window_name"></property> <property name="window_name"></property>
<property name="window_style"></property> <property name="window_style"></property>
@ -1144,6 +1370,7 @@
<object class="wxTextCtrl" expanded="1"> <object class="wxTextCtrl" expanded="1">
<property name="bg"></property> <property name="bg"></property>
<property name="context_help"></property> <property name="context_help"></property>
<property name="context_menu">1</property>
<property name="enabled">1</property> <property name="enabled">1</property>
<property name="fg"></property> <property name="fg"></property>
<property name="font"></property> <property name="font"></property>
@ -1159,6 +1386,10 @@
<property name="style"></property> <property name="style"></property>
<property name="subclass"></property> <property name="subclass"></property>
<property name="tooltip">The text (or value) of the currently selected field</property> <property name="tooltip">The text (or value) of the currently selected field</property>
<property name="validator_data_type"></property>
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
<property name="validator_variable"></property>
<property name="value"></property> <property name="value"></property>
<property name="window_extra_style"></property> <property name="window_extra_style"></property>
<property name="window_name"></property> <property name="window_name"></property>
@ -1198,18 +1429,19 @@
<property name="border">5</property> <property name="border">5</property>
<property name="flag">wxALL|wxEXPAND</property> <property name="flag">wxALL|wxEXPAND</property>
<property name="proportion">0</property> <property name="proportion">0</property>
<object class="wxBoxSizer" expanded="1"> <object class="wxBoxSizer" expanded="0">
<property name="minimum_size"></property> <property name="minimum_size"></property>
<property name="name">textSizeBoxSizer</property> <property name="name">textSizeBoxSizer</property>
<property name="orient">wxVERTICAL</property> <property name="orient">wxVERTICAL</property>
<property name="permission">none</property> <property name="permission">none</property>
<object class="sizeritem" expanded="1"> <object class="sizeritem" expanded="0">
<property name="border">5</property> <property name="border">5</property>
<property name="flag"></property> <property name="flag"></property>
<property name="proportion">0</property> <property name="proportion">0</property>
<object class="wxStaticText" expanded="1"> <object class="wxStaticText" expanded="0">
<property name="bg"></property> <property name="bg"></property>
<property name="context_help"></property> <property name="context_help"></property>
<property name="context_menu">1</property>
<property name="enabled">1</property> <property name="enabled">1</property>
<property name="fg"></property> <property name="fg"></property>
<property name="font"></property> <property name="font"></property>
@ -1225,6 +1457,10 @@
<property name="style"></property> <property name="style"></property>
<property name="subclass"></property> <property name="subclass"></property>
<property name="tooltip"></property> <property name="tooltip"></property>
<property name="validator_data_type"></property>
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
<property name="validator_variable"></property>
<property name="window_extra_style"></property> <property name="window_extra_style"></property>
<property name="window_name"></property> <property name="window_name"></property>
<property name="window_style"></property> <property name="window_style"></property>
@ -1254,13 +1490,14 @@
<event name="OnUpdateUI"></event> <event name="OnUpdateUI"></event>
</object> </object>
</object> </object>
<object class="sizeritem" expanded="1"> <object class="sizeritem" expanded="0">
<property name="border">5</property> <property name="border">5</property>
<property name="flag">wxEXPAND</property> <property name="flag">wxEXPAND</property>
<property name="proportion">0</property> <property name="proportion">0</property>
<object class="wxTextCtrl" expanded="1"> <object class="wxTextCtrl" expanded="0">
<property name="bg"></property> <property name="bg"></property>
<property name="context_help"></property> <property name="context_help"></property>
<property name="context_menu">1</property>
<property name="enabled">1</property> <property name="enabled">1</property>
<property name="fg"></property> <property name="fg"></property>
<property name="font"></property> <property name="font"></property>
@ -1276,6 +1513,10 @@
<property name="style"></property> <property name="style"></property>
<property name="subclass"></property> <property name="subclass"></property>
<property name="tooltip">The size of the currently selected field&apos;s text in the schematic</property> <property name="tooltip">The size of the currently selected field&apos;s text in the schematic</property>
<property name="validator_data_type"></property>
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
<property name="validator_variable"></property>
<property name="value"></property> <property name="value"></property>
<property name="window_extra_style"></property> <property name="window_extra_style"></property>
<property name="window_name"></property> <property name="window_name"></property>
@ -1314,7 +1555,7 @@
<object class="sizeritem" expanded="1"> <object class="sizeritem" expanded="1">
<property name="border">5</property> <property name="border">5</property>
<property name="flag">wxEXPAND</property> <property name="flag">wxEXPAND</property>
<property name="proportion">1</property> <property name="proportion">0</property>
<object class="wxBoxSizer" expanded="0"> <object class="wxBoxSizer" expanded="0">
<property name="minimum_size"></property> <property name="minimum_size"></property>
<property name="name">positionBoxSizer</property> <property name="name">positionBoxSizer</property>
@ -1336,6 +1577,7 @@
<object class="wxStaticText" expanded="1"> <object class="wxStaticText" expanded="1">
<property name="bg"></property> <property name="bg"></property>
<property name="context_help"></property> <property name="context_help"></property>
<property name="context_menu">1</property>
<property name="enabled">1</property> <property name="enabled">1</property>
<property name="fg"></property> <property name="fg"></property>
<property name="font"></property> <property name="font"></property>
@ -1351,6 +1593,10 @@
<property name="style"></property> <property name="style"></property>
<property name="subclass"></property> <property name="subclass"></property>
<property name="tooltip"></property> <property name="tooltip"></property>
<property name="validator_data_type"></property>
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
<property name="validator_variable"></property>
<property name="window_extra_style"></property> <property name="window_extra_style"></property>
<property name="window_name"></property> <property name="window_name"></property>
<property name="window_style"></property> <property name="window_style"></property>
@ -1387,6 +1633,7 @@
<object class="wxTextCtrl" expanded="1"> <object class="wxTextCtrl" expanded="1">
<property name="bg"></property> <property name="bg"></property>
<property name="context_help"></property> <property name="context_help"></property>
<property name="context_menu">1</property>
<property name="enabled">1</property> <property name="enabled">1</property>
<property name="fg"></property> <property name="fg"></property>
<property name="font"></property> <property name="font"></property>
@ -1402,6 +1649,10 @@
<property name="style"></property> <property name="style"></property>
<property name="subclass"></property> <property name="subclass"></property>
<property name="tooltip">The X coordinate of the text relative to the component</property> <property name="tooltip">The X coordinate of the text relative to the component</property>
<property name="validator_data_type"></property>
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
<property name="validator_variable"></property>
<property name="value"></property> <property name="value"></property>
<property name="window_extra_style"></property> <property name="window_extra_style"></property>
<property name="window_name"></property> <property name="window_name"></property>
@ -1453,6 +1704,7 @@
<object class="wxStaticText" expanded="1"> <object class="wxStaticText" expanded="1">
<property name="bg"></property> <property name="bg"></property>
<property name="context_help"></property> <property name="context_help"></property>
<property name="context_menu">1</property>
<property name="enabled">1</property> <property name="enabled">1</property>
<property name="fg"></property> <property name="fg"></property>
<property name="font"></property> <property name="font"></property>
@ -1468,6 +1720,10 @@
<property name="style"></property> <property name="style"></property>
<property name="subclass"></property> <property name="subclass"></property>
<property name="tooltip"></property> <property name="tooltip"></property>
<property name="validator_data_type"></property>
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
<property name="validator_variable"></property>
<property name="window_extra_style"></property> <property name="window_extra_style"></property>
<property name="window_name"></property> <property name="window_name"></property>
<property name="window_style"></property> <property name="window_style"></property>
@ -1504,6 +1760,7 @@
<object class="wxTextCtrl" expanded="1"> <object class="wxTextCtrl" expanded="1">
<property name="bg"></property> <property name="bg"></property>
<property name="context_help"></property> <property name="context_help"></property>
<property name="context_menu">1</property>
<property name="enabled">1</property> <property name="enabled">1</property>
<property name="fg"></property> <property name="fg"></property>
<property name="font"></property> <property name="font"></property>
@ -1519,6 +1776,10 @@
<property name="style"></property> <property name="style"></property>
<property name="subclass"></property> <property name="subclass"></property>
<property name="tooltip">The Y coordinate of the text relative to the component</property> <property name="tooltip">The Y coordinate of the text relative to the component</property>
<property name="validator_data_type"></property>
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
<property name="validator_variable"></property>
<property name="value"></property> <property name="value"></property>
<property name="window_extra_style"></property> <property name="window_extra_style"></property>
<property name="window_name"></property> <property name="window_name"></property>
@ -1556,26 +1817,6 @@
</object> </object>
</object> </object>
</object> </object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxEXPAND</property>
<property name="proportion">1</property>
<object class="spacer" expanded="1">
<property name="height">0</property>
<property name="permission">protected</property>
<property name="width">0</property>
</object>
</object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxEXPAND</property>
<property name="proportion">1</property>
<object class="spacer" expanded="1">
<property name="height">0</property>
<property name="permission">protected</property>
<property name="width">0</property>
</object>
</object>
</object> </object>
</object> </object>
</object> </object>

View File

@ -1,5 +1,5 @@
/////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////
// C++ code generated with wxFormBuilder (version Apr 16 2008) // C++ code generated with wxFormBuilder (version Sep 8 2010)
// http://www.wxformbuilder.org/ // http://www.wxformbuilder.org/
// //
// PLEASE DO "NOT" EDIT THIS FILE! // PLEASE DO "NOT" EDIT THIS FILE!
@ -48,6 +48,8 @@ class DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_FBP : public wxDialog
wxButton* addFieldButton; wxButton* addFieldButton;
wxButton* deleteFieldButton; wxButton* deleteFieldButton;
wxButton* moveUpButton; wxButton* moveUpButton;
wxRadioBox* m_FieldHJustifyCtrl;
wxRadioBox* m_FieldVJustifyCtrl;
wxCheckBox* showCheckBox; wxCheckBox* showCheckBox;
wxCheckBox* rotateCheckBox; wxCheckBox* rotateCheckBox;
wxRadioBox* m_StyleRadioBox; wxRadioBox* m_StyleRadioBox;
@ -61,25 +63,24 @@ class DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_FBP : public wxDialog
wxTextCtrl* posXTextCtrl; wxTextCtrl* posXTextCtrl;
wxStaticText* posYLabel; wxStaticText* posYLabel;
wxTextCtrl* posYTextCtrl; wxTextCtrl* posYTextCtrl;
wxStdDialogButtonSizer* stdDialogButtonSizer; wxStdDialogButtonSizer* stdDialogButtonSizer;
wxButton* stdDialogButtonSizerOK; wxButton* stdDialogButtonSizerOK;
wxButton* stdDialogButtonSizerCancel; wxButton* stdDialogButtonSizerCancel;
// Virtual event handlers, overide them in your derived class // Virtual event handlers, overide them in your derived class
virtual void SetInitCmp( wxCommandEvent& event ){ event.Skip(); } virtual void SetInitCmp( wxCommandEvent& event ) { event.Skip(); }
virtual void OnListItemDeselected( wxListEvent& event ){ event.Skip(); } virtual void OnListItemDeselected( wxListEvent& event ) { event.Skip(); }
virtual void OnListItemSelected( wxListEvent& event ){ event.Skip(); } virtual void OnListItemSelected( wxListEvent& event ) { event.Skip(); }
virtual void addFieldButtonHandler( wxCommandEvent& event ){ event.Skip(); } virtual void addFieldButtonHandler( wxCommandEvent& event ) { event.Skip(); }
virtual void deleteFieldButtonHandler( wxCommandEvent& event ){ event.Skip(); } virtual void deleteFieldButtonHandler( wxCommandEvent& event ) { event.Skip(); }
virtual void moveUpButtonHandler( wxCommandEvent& event ){ event.Skip(); } virtual void moveUpButtonHandler( wxCommandEvent& event ) { event.Skip(); }
virtual void OnCancelButtonClick( wxCommandEvent& event ){ event.Skip(); } virtual void OnCancelButtonClick( wxCommandEvent& event ) { event.Skip(); }
virtual void OnOKButtonClick( wxCommandEvent& event ){ event.Skip(); } virtual void OnOKButtonClick( wxCommandEvent& event ) { event.Skip(); }
public: public:
DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_FBP( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Component Properties"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 630,520 ), long style = wxCAPTION|wxCLOSE_BOX|wxDEFAULT_DIALOG_STYLE|wxMAXIMIZE_BOX|wxMINIMIZE_BOX|wxRESIZE_BORDER|wxSYSTEM_MENU );
DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_FBP( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Component Properties"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 715,520 ), long style = wxCAPTION|wxCLOSE_BOX|wxDEFAULT_DIALOG_STYLE|wxMAXIMIZE_BOX|wxMINIMIZE_BOX|wxRESIZE_BORDER|wxSYSTEM_MENU );
~DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_FBP(); ~DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_FBP();
}; };

View File

@ -92,24 +92,18 @@ void DialogLabelEditor::InitDialog()
break; break;
} }
unsigned 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
if( m_CurrentText->m_Text.Length() < MINTEXTWIDTH ) int max_len = 0;
if ( !multiLine )
{ {
wxString textWidth; max_len =m_CurrentText->m_Text.Length();
textWidth.Append( 'M', MINTEXTWIDTH );
EnsureTextCtrlWidth( m_textLabel, &textWidth );
}
else if ( !multiLine )
{
EnsureTextCtrlWidth( m_textLabel );
} }
else else
{ {
// calculate the length of the biggest line // calculate the length of the biggest line
// 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 max_len = 0; int curr_len = MINTEXTWIDTH;
int curr_len = 0;
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++ )
{ {
@ -125,10 +119,13 @@ void DialogLabelEditor::InitDialog()
max_len = curr_len; max_len = curr_len;
} }
} }
wxString textWidth;
textWidth.Append( 'M', max_len );
EnsureTextCtrlWidth( m_textLabel, &textWidth );
} }
if( max_len < MINTEXTWIDTH )
max_len = MINTEXTWIDTH;
wxString textWidth;
textWidth.Append( 'M', MINTEXTWIDTH );
EnsureTextCtrlWidth( m_textLabel, &textWidth );
// Set validators // Set validators
m_TextOrient->SetSelection( m_CurrentText->GetSchematicTextOrientation() ); m_TextOrient->SetSelection( m_CurrentText->GetSchematicTextOrientation() );

View File

@ -1,5 +1,5 @@
/////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////
// C++ code generated with wxFormBuilder (version Apr 16 2008) // C++ code generated with wxFormBuilder (version Sep 8 2010)
// http://www.wxformbuilder.org/ // http://www.wxformbuilder.org/
// //
// PLEASE DO "NOT" EDIT THIS FILE! // PLEASE DO "NOT" EDIT THIS FILE!
@ -107,4 +107,5 @@ DialogLabelEditor_Base::~DialogLabelEditor_Base()
m_textLabelMultiLine->Disconnect( wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler( DialogLabelEditor_Base::OnEnterKey ), NULL, this ); m_textLabelMultiLine->Disconnect( wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler( DialogLabelEditor_Base::OnEnterKey ), NULL, this );
m_sdbSizer1Cancel->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DialogLabelEditor_Base::OnCancelClick ), NULL, this ); m_sdbSizer1Cancel->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DialogLabelEditor_Base::OnCancelClick ), NULL, this );
m_sdbSizer1OK->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DialogLabelEditor_Base::OnOkClick ), NULL, this ); m_sdbSizer1OK->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DialogLabelEditor_Base::OnOkClick ), NULL, this );
} }

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,5 @@
/////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////
// C++ code generated with wxFormBuilder (version Apr 16 2008) // C++ code generated with wxFormBuilder (version Sep 8 2010)
// http://www.wxformbuilder.org/ // http://www.wxformbuilder.org/
// //
// PLEASE DO "NOT" EDIT THIS FILE! // PLEASE DO "NOT" EDIT THIS FILE!
@ -54,12 +54,13 @@ class DialogLabelEditor_Base : public wxDialog
wxButton* m_sdbSizer1Cancel; wxButton* m_sdbSizer1Cancel;
// Virtual event handlers, overide them in your derived class // Virtual event handlers, overide them in your derived class
virtual void OnEnterKey( wxCommandEvent& event ){ event.Skip(); } virtual void OnEnterKey( wxCommandEvent& event ) { event.Skip(); }
virtual void OnCancelClick( wxCommandEvent& event ){ event.Skip(); } virtual void OnCancelClick( wxCommandEvent& event ) { event.Skip(); }
virtual void OnOkClick( wxCommandEvent& event ){ event.Skip(); } virtual void OnOkClick( wxCommandEvent& event ) { event.Skip(); }
public: public:
DialogLabelEditor_Base( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Text Editor"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 359,347 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER ); DialogLabelEditor_Base( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Text Editor"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 359,347 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER );
~DialogLabelEditor_Base(); ~DialogLabelEditor_Base();

View File

@ -611,7 +611,7 @@ void DIALOG_EDIT_LIBENTRY_FIELDS_IN_LIB::copySelectedFieldToPanel()
m_StyleRadioBox->SetSelection( style ); m_StyleRadioBox->SetSelection( style );
// Copy the text justification // Select the right text justification
if( field.m_HJustify == GR_TEXT_HJUSTIFY_LEFT ) if( field.m_HJustify == GR_TEXT_HJUSTIFY_LEFT )
m_FieldHJustifyCtrl->SetSelection(0); m_FieldHJustifyCtrl->SetSelection(0);
else if( field.m_HJustify == GR_TEXT_HJUSTIFY_RIGHT ) else if( field.m_HJustify == GR_TEXT_HJUSTIFY_RIGHT )

View File

@ -1,5 +1,5 @@
/////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////
// C++ code generated with wxFormBuilder (version Apr 16 2008) // C++ code generated with wxFormBuilder (version Sep 8 2010)
// http://www.wxformbuilder.org/ // http://www.wxformbuilder.org/
// //
// PLEASE DO "NOT" EDIT THIS FILE! // PLEASE DO "NOT" EDIT THIS FILE!
@ -50,21 +50,13 @@ DIALOG_EDIT_LIBENTRY_FIELDS_IN_LIB_BASE::DIALOG_EDIT_LIBENTRY_FIELDS_IN_LIB_BASE
wxStaticBoxSizer* optionsSizer; wxStaticBoxSizer* optionsSizer;
optionsSizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Options") ), wxHORIZONTAL ); optionsSizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Options") ), wxHORIZONTAL );
wxBoxSizer* orientationSizer;
orientationSizer = new wxBoxSizer( wxHORIZONTAL );
wxString m_FieldHJustifyCtrlChoices[] = { _("Align left"), _("Align center"), _("Align right") }; wxString m_FieldHJustifyCtrlChoices[] = { _("Align left"), _("Align center"), _("Align right") };
int m_FieldHJustifyCtrlNChoices = sizeof( m_FieldHJustifyCtrlChoices ) / sizeof( wxString ); int m_FieldHJustifyCtrlNChoices = sizeof( m_FieldHJustifyCtrlChoices ) / sizeof( wxString );
m_FieldHJustifyCtrl = new wxRadioBox( this, wxID_ANY, _("Horiz. Justify"), wxDefaultPosition, wxDefaultSize, m_FieldHJustifyCtrlNChoices, m_FieldHJustifyCtrlChoices, 1, wxRA_SPECIFY_COLS ); m_FieldHJustifyCtrl = new wxRadioBox( this, wxID_ANY, _("Horiz. Justify"), wxDefaultPosition, wxDefaultSize, m_FieldHJustifyCtrlNChoices, m_FieldHJustifyCtrlChoices, 1, wxRA_SPECIFY_COLS );
m_FieldHJustifyCtrl->SetSelection( 1 ); m_FieldHJustifyCtrl->SetSelection( 1 );
m_FieldHJustifyCtrl->SetToolTip( _("Select if the component is to be rotated when drawn") ); m_FieldHJustifyCtrl->SetToolTip( _("Select if the component is to be rotated when drawn") );
orientationSizer->Add( m_FieldHJustifyCtrl, 1, wxALL, 8 ); optionsSizer->Add( m_FieldHJustifyCtrl, 1, wxBOTTOM|wxRIGHT|wxLEFT, 8 );
optionsSizer->Add( orientationSizer, 1, wxLEFT|wxRIGHT|wxTOP|wxEXPAND|wxALIGN_CENTER_VERTICAL, 0 );
wxBoxSizer* mirrorSizer;
mirrorSizer = new wxBoxSizer( wxHORIZONTAL );
wxString m_FieldVJustifyCtrlChoices[] = { _("Align bottom"), _("Align center"), _("Align top") }; wxString m_FieldVJustifyCtrlChoices[] = { _("Align bottom"), _("Align center"), _("Align top") };
int m_FieldVJustifyCtrlNChoices = sizeof( m_FieldVJustifyCtrlChoices ) / sizeof( wxString ); int m_FieldVJustifyCtrlNChoices = sizeof( m_FieldVJustifyCtrlChoices ) / sizeof( wxString );
@ -72,11 +64,9 @@ DIALOG_EDIT_LIBENTRY_FIELDS_IN_LIB_BASE::DIALOG_EDIT_LIBENTRY_FIELDS_IN_LIB_BASE
m_FieldVJustifyCtrl->SetSelection( 1 ); m_FieldVJustifyCtrl->SetSelection( 1 );
m_FieldVJustifyCtrl->SetToolTip( _("Pick the graphical transformation to be used when displaying the component, if any") ); m_FieldVJustifyCtrl->SetToolTip( _("Pick the graphical transformation to be used when displaying the component, if any") );
mirrorSizer->Add( m_FieldVJustifyCtrl, 1, wxALL, 8 ); optionsSizer->Add( m_FieldVJustifyCtrl, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 8 );
optionsSizer->Add( mirrorSizer, 1, wxEXPAND|wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, 0 ); fieldEditBoxSizer->Add( optionsSizer, 0, wxALIGN_TOP|wxEXPAND|wxBOTTOM, 5 );
fieldEditBoxSizer->Add( optionsSizer, 0, wxALIGN_TOP|wxALL|wxEXPAND, 5 );
wxStaticBoxSizer* visibilitySizer; wxStaticBoxSizer* visibilitySizer;
visibilitySizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Visibility") ), wxHORIZONTAL ); visibilitySizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Visibility") ), wxHORIZONTAL );
@ -85,13 +75,11 @@ DIALOG_EDIT_LIBENTRY_FIELDS_IN_LIB_BASE::DIALOG_EDIT_LIBENTRY_FIELDS_IN_LIB_BASE
bShowRotateSizer = new wxBoxSizer( wxVERTICAL ); bShowRotateSizer = new wxBoxSizer( wxVERTICAL );
showCheckBox = new wxCheckBox( this, wxID_ANY, _("Show"), wxDefaultPosition, wxDefaultSize, 0 ); showCheckBox = new wxCheckBox( this, wxID_ANY, _("Show"), wxDefaultPosition, wxDefaultSize, 0 );
showCheckBox->SetToolTip( _("Check if you want this field visible") ); showCheckBox->SetToolTip( _("Check if you want this field visible") );
bShowRotateSizer->Add( showCheckBox, 0, wxALL, 5 ); bShowRotateSizer->Add( showCheckBox, 0, wxALL, 5 );
rotateCheckBox = new wxCheckBox( this, wxID_ANY, _("Rotate"), wxDefaultPosition, wxDefaultSize, 0 ); rotateCheckBox = new wxCheckBox( this, wxID_ANY, _("Rotate"), wxDefaultPosition, wxDefaultSize, 0 );
rotateCheckBox->SetToolTip( _("Check if you want this field's text rotated 90 degrees") ); rotateCheckBox->SetToolTip( _("Check if you want this field's text rotated 90 degrees") );
bShowRotateSizer->Add( rotateCheckBox, 0, wxALL, 5 ); bShowRotateSizer->Add( rotateCheckBox, 0, wxALL, 5 );
@ -101,7 +89,7 @@ DIALOG_EDIT_LIBENTRY_FIELDS_IN_LIB_BASE::DIALOG_EDIT_LIBENTRY_FIELDS_IN_LIB_BASE
wxString m_StyleRadioBoxChoices[] = { _("Normal"), _("Italic"), _("Bold"), _("Bold Italic") }; wxString m_StyleRadioBoxChoices[] = { _("Normal"), _("Italic"), _("Bold"), _("Bold Italic") };
int m_StyleRadioBoxNChoices = sizeof( m_StyleRadioBoxChoices ) / sizeof( wxString ); int m_StyleRadioBoxNChoices = sizeof( m_StyleRadioBoxChoices ) / sizeof( wxString );
m_StyleRadioBox = new wxRadioBox( this, wxID_ANY, _("Style:"), wxDefaultPosition, wxDefaultSize, m_StyleRadioBoxNChoices, m_StyleRadioBoxChoices, 1, wxRA_SPECIFY_COLS ); m_StyleRadioBox = new wxRadioBox( this, wxID_ANY, _("Style:"), wxDefaultPosition, wxDefaultSize, m_StyleRadioBoxNChoices, m_StyleRadioBoxChoices, 1, wxRA_SPECIFY_COLS );
m_StyleRadioBox->SetSelection( 0 ); m_StyleRadioBox->SetSelection( 1 );
visibilitySizer->Add( m_StyleRadioBox, 1, wxBOTTOM|wxRIGHT|wxLEFT, 5 ); visibilitySizer->Add( m_StyleRadioBox, 1, wxBOTTOM|wxRIGHT|wxLEFT, 5 );
fieldEditBoxSizer->Add( visibilitySizer, 0, wxEXPAND, 5 ); fieldEditBoxSizer->Add( visibilitySizer, 0, wxEXPAND, 5 );
@ -216,4 +204,5 @@ DIALOG_EDIT_LIBENTRY_FIELDS_IN_LIB_BASE::~DIALOG_EDIT_LIBENTRY_FIELDS_IN_LIB_BAS
moveUpButton->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_EDIT_LIBENTRY_FIELDS_IN_LIB_BASE::moveUpButtonHandler ), NULL, this ); moveUpButton->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_EDIT_LIBENTRY_FIELDS_IN_LIB_BASE::moveUpButtonHandler ), NULL, this );
stdDialogButtonSizerCancel->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_EDIT_LIBENTRY_FIELDS_IN_LIB_BASE::OnCancelButtonClick ), NULL, this ); stdDialogButtonSizerCancel->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_EDIT_LIBENTRY_FIELDS_IN_LIB_BASE::OnCancelButtonClick ), NULL, this );
stdDialogButtonSizerOK->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_EDIT_LIBENTRY_FIELDS_IN_LIB_BASE::OnOKButtonClick ), NULL, this ); stdDialogButtonSizerOK->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_EDIT_LIBENTRY_FIELDS_IN_LIB_BASE::OnOKButtonClick ), NULL, this );
} }

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,5 @@
/////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////
// C++ code generated with wxFormBuilder (version Apr 16 2008) // C++ code generated with wxFormBuilder (version Sep 8 2010)
// http://www.wxformbuilder.org/ // http://www.wxformbuilder.org/
// //
// PLEASE DO "NOT" EDIT THIS FILE! // PLEASE DO "NOT" EDIT THIS FILE!
@ -60,18 +60,19 @@ class DIALOG_EDIT_LIBENTRY_FIELDS_IN_LIB_BASE : public wxDialog
wxButton* stdDialogButtonSizerCancel; wxButton* stdDialogButtonSizerCancel;
// Virtual event handlers, overide them in your derived class // Virtual event handlers, overide them in your derived class
virtual void OnInitDialog( wxInitDialogEvent& event ){ event.Skip(); } virtual void OnInitDialog( wxInitDialogEvent& event ) { event.Skip(); }
virtual void OnListItemDeselected( wxListEvent& event ){ event.Skip(); } virtual void OnListItemDeselected( wxListEvent& event ) { event.Skip(); }
virtual void OnListItemSelected( wxListEvent& event ){ event.Skip(); } virtual void OnListItemSelected( wxListEvent& event ) { event.Skip(); }
virtual void addFieldButtonHandler( wxCommandEvent& event ){ event.Skip(); } virtual void addFieldButtonHandler( wxCommandEvent& event ) { event.Skip(); }
virtual void deleteFieldButtonHandler( wxCommandEvent& event ){ event.Skip(); } virtual void deleteFieldButtonHandler( wxCommandEvent& event ) { event.Skip(); }
virtual void moveUpButtonHandler( wxCommandEvent& event ){ event.Skip(); } virtual void moveUpButtonHandler( wxCommandEvent& event ) { event.Skip(); }
virtual void OnCancelButtonClick( wxCommandEvent& event ){ event.Skip(); } virtual void OnCancelButtonClick( wxCommandEvent& event ) { event.Skip(); }
virtual void OnOKButtonClick( wxCommandEvent& event ){ event.Skip(); } virtual void OnOKButtonClick( wxCommandEvent& event ) { event.Skip(); }
public: public:
DIALOG_EDIT_LIBENTRY_FIELDS_IN_LIB_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Fields Properties"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 773,550 ), long style = wxCAPTION|wxCLOSE_BOX|wxDEFAULT_DIALOG_STYLE|wxMAXIMIZE_BOX|wxMINIMIZE_BOX|wxRESIZE_BORDER|wxSYSTEM_MENU );
DIALOG_EDIT_LIBENTRY_FIELDS_IN_LIB_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Fields Properties"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 615,550 ), long style = wxCAPTION|wxCLOSE_BOX|wxDEFAULT_DIALOG_STYLE|wxMAXIMIZE_BOX|wxMINIMIZE_BOX|wxRESIZE_BORDER|wxSYSTEM_MENU );
~DIALOG_EDIT_LIBENTRY_FIELDS_IN_LIB_BASE(); ~DIALOG_EDIT_LIBENTRY_FIELDS_IN_LIB_BASE();
}; };

View File

@ -11,7 +11,7 @@
DIALOG_SCH_EDIT_SHEET_PIN_BASE::DIALOG_SCH_EDIT_SHEET_PIN_BASE( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxDialog( parent, id, title, pos, size, style ) DIALOG_SCH_EDIT_SHEET_PIN_BASE::DIALOG_SCH_EDIT_SHEET_PIN_BASE( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxDialog( parent, id, title, pos, size, style )
{ {
this->SetSizeHints( wxDefaultSize, wxDefaultSize ); this->SetSizeHints( wxSize( 350,-1 ), wxDefaultSize );
wxBoxSizer* m_mainSizer; wxBoxSizer* m_mainSizer;
m_mainSizer = new wxBoxSizer( wxVERTICAL ); m_mainSizer = new wxBoxSizer( wxVERTICAL );
@ -21,6 +21,7 @@ DIALOG_SCH_EDIT_SHEET_PIN_BASE::DIALOG_SCH_EDIT_SHEET_PIN_BASE( wxWindow* parent
wxFlexGridSizer* fgSizer1; wxFlexGridSizer* fgSizer1;
fgSizer1 = new wxFlexGridSizer( 4, 3, 0, 0 ); fgSizer1 = new wxFlexGridSizer( 4, 3, 0, 0 );
fgSizer1->AddGrowableCol( 1 );
fgSizer1->SetFlexibleDirection( wxBOTH ); fgSizer1->SetFlexibleDirection( wxBOTH );
fgSizer1->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); fgSizer1->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
@ -85,7 +86,6 @@ DIALOG_SCH_EDIT_SHEET_PIN_BASE::DIALOG_SCH_EDIT_SHEET_PIN_BASE( wxWindow* parent
this->SetSizer( m_mainSizer ); this->SetSizer( m_mainSizer );
this->Layout(); this->Layout();
m_mainSizer->Fit( this );
this->Centre( wxBOTH ); this->Centre( wxBOTH );
} }

View File

@ -34,10 +34,10 @@
<property name="hidden">0</property> <property name="hidden">0</property>
<property name="id">wxID_ANY</property> <property name="id">wxID_ANY</property>
<property name="maximum_size"></property> <property name="maximum_size"></property>
<property name="minimum_size"></property> <property name="minimum_size">350,-1</property>
<property name="name">DIALOG_SCH_EDIT_SHEET_PIN_BASE</property> <property name="name">DIALOG_SCH_EDIT_SHEET_PIN_BASE</property>
<property name="pos"></property> <property name="pos"></property>
<property name="size"></property> <property name="size">350,189</property>
<property name="style">wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER</property> <property name="style">wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER</property>
<property name="subclass"></property> <property name="subclass"></property>
<property name="title">Sheet Pin Properties</property> <property name="title">Sheet Pin Properties</property>
@ -100,7 +100,7 @@
<object class="wxFlexGridSizer" expanded="1"> <object class="wxFlexGridSizer" expanded="1">
<property name="cols">3</property> <property name="cols">3</property>
<property name="flexible_direction">wxBOTH</property> <property name="flexible_direction">wxBOTH</property>
<property name="growablecols"></property> <property name="growablecols">1</property>
<property name="growablerows"></property> <property name="growablerows"></property>
<property name="hgap">0</property> <property name="hgap">0</property>
<property name="minimum_size"></property> <property name="minimum_size"></property>

View File

@ -52,7 +52,7 @@ class DIALOG_SCH_EDIT_SHEET_PIN_BASE : public wxDialog
public: public:
DIALOG_SCH_EDIT_SHEET_PIN_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Sheet Pin Properties"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER ); DIALOG_SCH_EDIT_SHEET_PIN_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Sheet Pin Properties"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 350,189 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER );
~DIALOG_SCH_EDIT_SHEET_PIN_BASE(); ~DIALOG_SCH_EDIT_SHEET_PIN_BASE();
}; };

View File

@ -42,7 +42,7 @@ void SCH_EDIT_FRAME::StartMoveCmpField( SCH_FIELD* aField, wxDC* DC )
SCH_COMPONENT* comp = (SCH_COMPONENT*) aField->GetParent(); SCH_COMPONENT* comp = (SCH_COMPONENT*) aField->GetParent();
SAFE_DELETE( g_ItemToUndoCopy ); SAFE_DELETE( g_ItemToUndoCopy );
g_ItemToUndoCopy = comp->GenCopy(); g_ItemToUndoCopy = new SCH_COMPONENT( *comp );
pos = comp->m_Pos; pos = comp->m_Pos;

View File

@ -41,7 +41,7 @@ void SCH_EDIT_FRAME::StartMoveTexte( SCH_TEXT* TextStruct, wxDC* DC )
if( (TextStruct->m_Flags & IS_NEW) == 0 ) if( (TextStruct->m_Flags & IS_NEW) == 0 )
{ {
delete g_ItemToUndoCopy; delete g_ItemToUndoCopy;
g_ItemToUndoCopy = TextStruct->GenCopy(); g_ItemToUndoCopy = TextStruct->Clone();
} }
TextStruct->m_Flags |= IS_MOVED; TextStruct->m_Flags |= IS_MOVED;

View File

@ -14,10 +14,14 @@
#include "general.h" #include "general.h"
#include "protos.h" #include "protos.h"
#include "class_library.h" #include "class_library.h"
#include "sch_sheet.h" #include "sch_bus_entry.h"
#include "sch_sheet_path.h"
#include "sch_component.h" #include "sch_component.h"
#include "sch_items.h" #include "sch_items.h"
#include "sch_line.h"
#include "sch_no_connect.h"
#include "sch_polyline.h"
#include "sch_sheet.h"
#include "sch_sheet_path.h"
#include "build_version.h" #include "build_version.h"
@ -185,8 +189,8 @@ void DrawStructsInGhost( WinEDA_DrawPanel* aPanel,
case SCH_POLYLINE_T: case SCH_POLYLINE_T:
{ {
SCH_POLYLINE* Struct = (SCH_POLYLINE*) aItem; SCH_POLYLINE* Struct = (SCH_POLYLINE*) aItem;
GRMoveTo( Struct->m_PolyPoints[0].x + aOffset.x, GRMoveTo( Struct->m_PolyPoints[0].x + aOffset.x, Struct->m_PolyPoints[0].y + aOffset.y );
Struct->m_PolyPoints[0].y + aOffset.y );
for( unsigned ii = 1; ii < Struct->GetCornerCount(); ii++ ) for( unsigned ii = 1; ii < Struct->GetCornerCount(); ii++ )
GRLineTo( &aPanel->m_ClipBox, GRLineTo( &aPanel->m_ClipBox,
aDC, aDC,
@ -202,15 +206,16 @@ void DrawStructsInGhost( WinEDA_DrawPanel* aPanel,
{ {
SCH_LINE* Struct; SCH_LINE* Struct;
Struct = (SCH_LINE*) aItem; Struct = (SCH_LINE*) aItem;
if( (Struct->m_Flags & STARTPOINT) == 0 ) if( (Struct->m_Flags & STARTPOINT) == 0 )
{ {
GRMoveTo( Struct->m_Start.x + aOffset.x, GRMoveTo( Struct->m_Start.x + aOffset.x, Struct->m_Start.y + aOffset.y );
Struct->m_Start.y + aOffset.y );
} }
else else
{ {
GRMoveTo( Struct->m_Start.x, Struct->m_Start.y ); GRMoveTo( Struct->m_Start.x, Struct->m_Start.y );
} }
if( (Struct->m_Flags & ENDPOINT) == 0 ) if( (Struct->m_Flags & ENDPOINT) == 0 )
{ {
GRLineTo( &aPanel->m_ClipBox, aDC, Struct->m_End.x + aOffset.x, GRLineTo( &aPanel->m_ClipBox, aDC, Struct->m_End.x + aOffset.x,

View File

@ -34,7 +34,7 @@ void SCH_EDIT_FRAME::OnCopySchematicItemRequest( wxCommandEvent& event )
case SCH_COMPONENT_T: case SCH_COMPONENT_T:
{ {
SCH_COMPONENT* newitem; SCH_COMPONENT* newitem;
newitem = ((SCH_COMPONENT*) curr_item)->GenCopy(); newitem = new SCH_COMPONENT( *( (SCH_COMPONENT*) curr_item ) );
newitem->m_TimeStamp = GetTimeStamp(); newitem->m_TimeStamp = GetTimeStamp();
newitem->ClearAnnotation( NULL ); newitem->ClearAnnotation( NULL );
newitem->m_Flags = IS_NEW; newitem->m_Flags = IS_NEW;
@ -51,7 +51,7 @@ void SCH_EDIT_FRAME::OnCopySchematicItemRequest( wxCommandEvent& event )
case SCH_GLOBAL_LABEL_T: case SCH_GLOBAL_LABEL_T:
case SCH_HIERARCHICAL_LABEL_T: case SCH_HIERARCHICAL_LABEL_T:
{ {
SCH_TEXT* newitem = ((SCH_TEXT*) curr_item)->GenCopy(); SCH_TEXT* newitem = (SCH_TEXT*) curr_item->Clone();
newitem->m_Flags = IS_NEW; newitem->m_Flags = IS_NEW;
StartMoveTexte( newitem, &dc ); StartMoveTexte( newitem, &dc );
/* Redraw the original part in XOR mode */ /* Redraw the original part in XOR mode */

View File

@ -420,7 +420,8 @@ void SCH_EDIT_FRAME::StartMovePart( SCH_COMPONENT* Component, wxDC* DC )
{ {
SAFE_DELETE( g_ItemToUndoCopy ); SAFE_DELETE( g_ItemToUndoCopy );
} }
g_ItemToUndoCopy = Component->GenCopy();
g_ItemToUndoCopy = Component->Clone();
} }
DrawPanel->CursorOff( DC ); DrawPanel->CursorOff( DC );

View File

@ -13,6 +13,7 @@
#include "libeditframe.h" #include "libeditframe.h"
#include "class_libentry.h" #include "class_libentry.h"
#include "sch_items.h" #include "sch_items.h"
#include "sch_line.h"
#include "sch_component.h" #include "sch_component.h"
#include "sch_sheet.h" #include "sch_sheet.h"
@ -510,8 +511,10 @@ void SCH_EDIT_FRAME::OnHotKey( wxDC* DC, int hotkey, EDA_ITEM* DrawStruct )
if( DrawStruct->Type() == SCH_LINE_T ) if( DrawStruct->Type() == SCH_LINE_T )
{ {
SCH_LINE* segment = (SCH_LINE*) DrawStruct; SCH_LINE* segment = (SCH_LINE*) DrawStruct;
if( segment->GetLayer() != LAYER_BUS ) if( segment->GetLayer() != LAYER_BUS )
break; break;
// Bus in progress: // Bus in progress:
OnLeftClick( DC, MousePos ); OnLeftClick( DC, MousePos );
} }
@ -670,7 +673,12 @@ void SCH_EDIT_FRAME::OnHotKey( wxDC* DC, int hotkey, EDA_ITEM* DrawStruct )
if( DrawStruct == NULL ) if( DrawStruct == NULL )
{ {
// Find the schematic object to move under the cursor // For a drag or copy command, try to find first a component:
if( DrawStruct == NULL && HK_Descr->m_Idcommand != HK_MOVE_COMPONENT_OR_ITEM )
DrawStruct = LocateSmallestComponent( GetScreen() );
// If no component, find the schematic object to move/drag or copy under the cursor
if( DrawStruct == NULL )
DrawStruct = SchematicGeneralLocateAndDisplay( false ); DrawStruct = SchematicGeneralLocateAndDisplay( false );
if( DrawStruct == NULL ) if( DrawStruct == NULL )
@ -748,7 +756,12 @@ void SCH_EDIT_FRAME::OnHotKey( wxDC* DC, int hotkey, EDA_ITEM* DrawStruct )
case SCH_LINE_T: case SCH_LINE_T:
if( ( (SCH_ITEM*) DrawStruct )->GetLayer() == LAYER_WIRE ) if( ( (SCH_ITEM*) DrawStruct )->GetLayer() == LAYER_WIRE )
{
if( HK_Descr->m_Idcommand == HK_DRAG )
wxPostEvent( this, eventDragWire ); wxPostEvent( this, eventDragWire );
else
wxPostEvent( this, eventMoveItem );
}
break; break;
default: default:

View File

@ -263,8 +263,8 @@ void LIB_ARC::DoOffset( const wxPoint& aOffset )
bool LIB_ARC::DoTestInside( EDA_Rect& aRect ) const bool LIB_ARC::DoTestInside( EDA_Rect& aRect ) const
{ {
return aRect.Inside( m_ArcStart.x, -m_ArcStart.y ) return aRect.Contains( m_ArcStart.x, -m_ArcStart.y )
|| aRect.Inside( m_ArcEnd.x, -m_ArcEnd.y ); || aRect.Contains( m_ArcEnd.x, -m_ArcEnd.y );
} }

View File

@ -164,7 +164,7 @@ bool LIB_BEZIER::DoTestInside( EDA_Rect& aRect ) const
{ {
for( size_t i = 0; i < m_PolyPoints.size(); i++ ) for( size_t i = 0; i < m_PolyPoints.size(); i++ )
{ {
if( aRect.Inside( m_PolyPoints[i].x, -m_PolyPoints[i].y ) ) if( aRect.Contains( m_PolyPoints[i].x, -m_PolyPoints[i].y ) )
return true; return true;
} }

View File

@ -152,7 +152,7 @@ bool LIB_CIRCLE::DoTestInside( EDA_Rect& aRect ) const
* FIXME: This fails to take into account the radius around the center * FIXME: This fails to take into account the radius around the center
* point. * point.
*/ */
return aRect.Inside( m_Pos.x, -m_Pos.y ); return aRect.Contains( m_Pos.x, -m_Pos.y );
} }

View File

@ -326,8 +326,6 @@ void LIB_FIELD::drawGraphic( WinEDA_DrawPanel* aPanel, wxDC* aDC, const wxPoint&
if( aData ) if( aData )
text = *(wxString*)aData; text = *(wxString*)aData;
else if( InEditMode() )
text = GetFullText( m_Unit );
else else
text = m_Text; text = m_Text;
@ -350,6 +348,11 @@ void LIB_FIELD::drawGraphic( WinEDA_DrawPanel* aPanel, wxDC* aDC, const wxPoint&
bool LIB_FIELD::HitTest( const wxPoint& aPosition ) bool LIB_FIELD::HitTest( const wxPoint& aPosition )
{ {
// Because HitTest is mainly used to select the field
// return always false if this field is void
if( IsVoid() )
return false;
return HitTest( aPosition, 0, DefaultTransform ); return HitTest( aPosition, 0, DefaultTransform );
} }
@ -466,7 +469,7 @@ bool LIB_FIELD::DoTestInside( EDA_Rect& rect ) const
* FIXME: This fails to take into acount the size and/or orientation of * FIXME: This fails to take into acount the size and/or orientation of
* the text. * the text.
*/ */
return rect.Inside( m_Pos.x, -m_Pos.y ); return rect.Contains( m_Pos.x, -m_Pos.y );
} }

View File

@ -106,6 +106,15 @@ public:
void SetFields( const std::vector <LIB_FIELD> aFields ); void SetFields( const std::vector <LIB_FIELD> aFields );
/**
* Function IsVoid
* @return true if the field value is void (no text in this field)
*/
bool IsVoid()
{
return m_Text.IsEmpty();
}
/** /**
* Function IsVisible * Function IsVisible
* @return true is this field is visible, false if flagged invisible * @return true is this field is visible, false if flagged invisible

View File

@ -1653,7 +1653,7 @@ bool LIB_PIN::DoTestInside( EDA_Rect& rect ) const
{ {
wxPoint end = ReturnPinEndPoint(); wxPoint end = ReturnPinEndPoint();
return rect.Inside( m_position.x, -m_position.y ) || rect.Inside( end.x, -end.y ); return rect.Contains( m_position.x, -m_position.y ) || rect.Contains( end.x, -end.y );
} }

View File

@ -162,7 +162,7 @@ bool LIB_POLYLINE::DoTestInside( EDA_Rect& aRect ) const
{ {
for( size_t i = 0; i < m_PolyPoints.size(); i++ ) for( size_t i = 0; i < m_PolyPoints.size(); i++ )
{ {
if( aRect.Inside( m_PolyPoints[i].x, -m_PolyPoints[i].y ) ) if( aRect.Contains( m_PolyPoints[i].x, -m_PolyPoints[i].y ) )
return true; return true;
} }

View File

@ -119,7 +119,7 @@ void LIB_RECTANGLE::DoOffset( const wxPoint& aOffset )
bool LIB_RECTANGLE::DoTestInside( EDA_Rect& aRect ) const bool LIB_RECTANGLE::DoTestInside( EDA_Rect& aRect ) const
{ {
return aRect.Inside( m_Pos.x, -m_Pos.y ) || aRect.Inside( m_End.x, -m_End.y ); return aRect.Contains( m_Pos.x, -m_Pos.y ) || aRect.Contains( m_End.x, -m_End.y );
} }

View File

@ -223,7 +223,7 @@ bool LIB_TEXT::DoTestInside( EDA_Rect& rect ) const
* FIXME: This should calculate the text size and justification and * FIXME: This should calculate the text size and justification and
* use rectangle instect. * use rectangle instect.
*/ */
return rect.Inside( m_Pos.x, -m_Pos.y ); return rect.Contains( m_Pos.x, -m_Pos.y );
} }

View File

@ -11,9 +11,13 @@
#include "general.h" #include "general.h"
#include "protos.h" #include "protos.h"
#include "sch_bus_entry.h"
#include "sch_marker.h" #include "sch_marker.h"
#include "sch_items.h" #include "sch_items.h"
#include "sch_line.h"
#include "sch_no_connect.h"
#include "sch_component.h" #include "sch_component.h"
#include "sch_polyline.h"
#include "sch_text.h" #include "sch_text.h"
#include "sch_sheet.h" #include "sch_sheet.h"

View File

@ -11,9 +11,13 @@
#include "general.h" #include "general.h"
#include "protos.h" #include "protos.h"
#include "class_library.h" #include "class_library.h"
#include "sch_bus_entry.h"
#include "sch_marker.h" #include "sch_marker.h"
#include "sch_items.h" #include "sch_items.h"
#include "sch_component.h" #include "sch_component.h"
#include "sch_line.h"
#include "sch_no_connect.h"
#include "sch_polyline.h"
#include "sch_sheet.h" #include "sch_sheet.h"
#include "lib_pin.h" #include "lib_pin.h"
#include "template_fieldnames.h" #include "template_fieldnames.h"
@ -139,6 +143,7 @@ int PickItemsInBlock( BLOCK_SELECTOR& aBlock, SCH_SCREEN* aScreen )
for( ; item != NULL; item = item->Next() ) for( ; item != NULL; item = item->Next() )
{ {
// an item is picked if its bounding box intersects the reference area
if( item->HitTest( area ) ) if( item->HitTest( area ) )
{ {
/* Put this structure in the picked list: */ /* Put this structure in the picked list: */
@ -310,7 +315,7 @@ bool SnapPoint2( const wxPoint& aPosRef, int SearchMask, SCH_ITEM* DrawList )
EDA_Rect BoundaryBox = field->GetBoundingBox(); EDA_Rect BoundaryBox = field->GetBoundingBox();
if( BoundaryBox.Inside( aPosRef ) ) if( BoundaryBox.Contains( aPosRef ) )
{ {
LastSnappedStruct = field; LastSnappedStruct = field;
return true; return true;
@ -323,7 +328,7 @@ bool SnapPoint2( const wxPoint& aPosRef, int SearchMask, SCH_ITEM* DrawList )
#define STRUCT ( (SCH_COMPONENT*) DrawList ) #define STRUCT ( (SCH_COMPONENT*) DrawList )
EDA_Rect BoundaryBox = STRUCT->GetBoundingBox(); EDA_Rect BoundaryBox = STRUCT->GetBoundingBox();
if( BoundaryBox.Inside( aPosRef ) ) if( BoundaryBox.Contains( aPosRef ) )
{ {
LastSnappedStruct = DrawList; LastSnappedStruct = DrawList;
return true; return true;

View File

@ -14,6 +14,8 @@
#include "lib_pin.h" #include "lib_pin.h"
#include "sch_items.h" #include "sch_items.h"
#include "sch_component.h" #include "sch_component.h"
#include "sch_line.h"
#include "sch_no_connect.h"
#include "sch_text.h" #include "sch_text.h"
#include "sch_sheet.h" #include "sch_sheet.h"

View File

@ -12,9 +12,12 @@
#include "general.h" #include "general.h"
#include "protos.h" #include "protos.h"
#include "sch_bus_entry.h"
#include "sch_text.h" #include "sch_text.h"
#include "sch_marker.h" #include "sch_marker.h"
#include "sch_items.h" #include "sch_items.h"
#include "sch_line.h"
#include "sch_no_connect.h"
#include "sch_component.h" #include "sch_component.h"
#include "sch_sheet.h" #include "sch_sheet.h"

View File

@ -15,10 +15,13 @@
#include "protos.h" #include "protos.h"
#include "hotkeys.h" #include "hotkeys.h"
#include "class_library.h" #include "class_library.h"
#include "sch_bus_entry.h"
#include "sch_marker.h" #include "sch_marker.h"
#include "sch_text.h" #include "sch_text.h"
#include "sch_items.h" #include "sch_items.h"
#include "sch_component.h" #include "sch_component.h"
#include "sch_line.h"
#include "sch_no_connect.h"
#include "sch_sheet.h" #include "sch_sheet.h"
#include "sch_sheet_path.h" #include "sch_sheet_path.h"

View File

@ -13,7 +13,11 @@
#include "general.h" #include "general.h"
#include "protos.h" #include "protos.h"
#include "sch_bus_entry.h"
#include "sch_marker.h" #include "sch_marker.h"
#include "sch_line.h"
#include "sch_no_connect.h"
#include "sch_polyline.h"
#include "sch_sheet.h" #include "sch_sheet.h"
#include "sch_component.h" #include "sch_component.h"
#include "sch_items.h" #include "sch_items.h"
@ -30,8 +34,7 @@ void RotateListOfItems( PICKED_ITEMS_LIST& aItemsList, wxPoint& rotationPoint )
} }
void DeleteItemsInList( WinEDA_DrawPanel* panel, void DeleteItemsInList( WinEDA_DrawPanel* panel, PICKED_ITEMS_LIST& aItemsList );
PICKED_ITEMS_LIST& aItemsList );
void DuplicateItemsInList( SCH_SCREEN* screen, PICKED_ITEMS_LIST& aItemsList, void DuplicateItemsInList( SCH_SCREEN* screen, PICKED_ITEMS_LIST& aItemsList,
const wxPoint aMoveVector ); const wxPoint aMoveVector );
@ -95,8 +98,7 @@ void DeleteItemsInList( WinEDA_DrawPanel* panel, PICKED_ITEMS_LIST& aItemsList )
if( item->Type() == SCH_SHEET_LABEL_T ) if( item->Type() == SCH_SHEET_LABEL_T )
{ {
/* this item is depending on a sheet, and is not in global list */ /* this item is depending on a sheet, and is not in global list */
wxMessageBox( wxT("DeleteItemsInList() err: unexpected \ wxMessageBox( wxT( "DeleteItemsInList() err: unexpected SCH_SHEET_LABEL_T" ) );
SCH_SHEET_LABEL_T" ) );
} }
else else
{ {
@ -218,82 +220,15 @@ void DuplicateItemsInList( SCH_SCREEN* screen, PICKED_ITEMS_LIST& aItemsList,
*/ */
SCH_ITEM* DuplicateStruct( SCH_ITEM* aDrawStruct, bool aClone ) SCH_ITEM* DuplicateStruct( SCH_ITEM* aDrawStruct, bool aClone )
{ {
SCH_ITEM* NewDrawStruct = NULL; wxCHECK_MSG( aDrawStruct != NULL, NULL,
wxT( "Cannot duplicate NULL schematic item! Bad programmer." ) );
if( aDrawStruct == NULL ) SCH_ITEM* NewDrawStruct = aDrawStruct->Clone();
{
wxMessageBox( wxT( "DuplicateStruct error: NULL struct" ) );
return NULL;
}
switch( aDrawStruct->Type() )
{
case SCH_POLYLINE_T:
NewDrawStruct = ( (SCH_POLYLINE*) aDrawStruct )->GenCopy();
break;
case SCH_LINE_T:
NewDrawStruct = ( (SCH_LINE*) aDrawStruct )->GenCopy();
break;
case SCH_BUS_ENTRY_T:
NewDrawStruct = ( (SCH_BUS_ENTRY*) aDrawStruct )->GenCopy();
break;
case SCH_JUNCTION_T:
NewDrawStruct = ( (SCH_JUNCTION*) aDrawStruct )->GenCopy();
break;
case SCH_MARKER_T:
NewDrawStruct = ( (SCH_MARKER*) aDrawStruct )->GenCopy();
break;
case SCH_NO_CONNECT_T:
NewDrawStruct = ( (SCH_NO_CONNECT*) aDrawStruct )->GenCopy();
break;
case SCH_TEXT_T:
NewDrawStruct = ( (SCH_TEXT*) aDrawStruct )->GenCopy();
break;
case SCH_LABEL_T:
NewDrawStruct = ( (SCH_LABEL*) aDrawStruct )->GenCopy();
break;
case SCH_HIERARCHICAL_LABEL_T:
NewDrawStruct = ( (SCH_HIERLABEL*) aDrawStruct )->GenCopy();
break;
case SCH_GLOBAL_LABEL_T:
NewDrawStruct = ( (SCH_GLOBALLABEL*) aDrawStruct )->GenCopy();
break;
case SCH_COMPONENT_T:
NewDrawStruct = ( (SCH_COMPONENT*) aDrawStruct )->GenCopy();
break;
case SCH_SHEET_T:
NewDrawStruct = ( (SCH_SHEET*) aDrawStruct )->GenCopy();
if( aClone )
{
( (SCH_SHEET*) NewDrawStruct )->m_SheetName =
( (SCH_SHEET*) aDrawStruct )->m_SheetName;
}
break;
default:
{
wxString msg;
msg << wxT( "DuplicateStruct error: unexpected StructType " )
<< aDrawStruct->Type() << wxT( " " ) << aDrawStruct->GetClass();
wxMessageBox( msg );
}
break;
}
if( aClone ) if( aClone )
NewDrawStruct->m_TimeStamp = aDrawStruct->m_TimeStamp; NewDrawStruct->m_TimeStamp = aDrawStruct->m_TimeStamp;
NewDrawStruct->m_Image = aDrawStruct; NewDrawStruct->m_Image = aDrawStruct;
return NewDrawStruct; return NewDrawStruct;
} }

View File

@ -14,7 +14,10 @@
#include "protos.h" #include "protos.h"
#include "class_library.h" #include "class_library.h"
#include "lib_pin.h" #include "lib_pin.h"
#include "sch_bus_entry.h"
#include "sch_items.h" #include "sch_items.h"
#include "sch_line.h"
#include "sch_no_connect.h"
#include "sch_component.h" #include "sch_component.h"
#include "sch_sheet.h" #include "sch_sheet.h"
#include "sch_text.h" #include "sch_text.h"

246
eeschema/sch_bus_entry.cpp Normal file
View File

@ -0,0 +1,246 @@
/***********************/
/* class SCH_BUS_ENTRY */
/***********************/
#include "fctsys.h"
#include "gr_basic.h"
#include "macros.h"
#include "class_drawpanel.h"
#include "trigo.h"
#include "common.h"
#include "richio.h"
#include "general.h"
#include "protos.h"
#include "sch_bus_entry.h"
SCH_BUS_ENTRY::SCH_BUS_ENTRY( const wxPoint& pos, int shape, int id ) :
SCH_ITEM( NULL, SCH_BUS_ENTRY_T )
{
m_Pos = pos;
m_Size.x = 100;
m_Size.y = 100;
m_Layer = LAYER_WIRE;
m_Width = 0;
if( id == BUS_TO_BUS )
{
m_Layer = LAYER_BUS;
}
if( shape == '/' )
m_Size.y = -100;
}
SCH_BUS_ENTRY::SCH_BUS_ENTRY( const SCH_BUS_ENTRY& aBusEntry ) :
SCH_ITEM( aBusEntry )
{
m_Pos = aBusEntry.m_Pos;
m_Size = aBusEntry.m_Size;
m_Width = aBusEntry.m_Width;
}
EDA_ITEM* SCH_BUS_ENTRY::doClone() const
{
return new SCH_BUS_ENTRY( *this );
}
wxPoint SCH_BUS_ENTRY::m_End() const
{
return wxPoint( m_Pos.x + m_Size.x, m_Pos.y + m_Size.y );
}
bool SCH_BUS_ENTRY::Save( FILE* aFile ) const
{
bool success = true;
const char* layer = "Wire";
const char* width = "Line";
if( GetLayer() == LAYER_BUS )
{
layer = "Bus"; width = "Bus";
}
if( fprintf( aFile, "Entry %s %s\n", layer, width ) == EOF )
{
success = false;
}
if( fprintf( aFile, "\t%-4d %-4d %-4d %-4d\n",
m_Pos.x, m_Pos.y, m_End().x, m_End().y ) == EOF )
{
success = false;
}
return success;
}
bool SCH_BUS_ENTRY::Load( LINE_READER& aLine, wxString& aErrorMsg )
{
char Name1[256];
char Name2[256];
char* line = (char*) aLine;
while( (*line != ' ' ) && *line )
line++;
if( sscanf( line, "%s %s", Name1, Name2 ) != 2 )
{
aErrorMsg.Printf( wxT( "EESchema file bus entry load error at line %d" ),
aLine.LineNumber() );
aErrorMsg << wxT( "\n" ) << CONV_FROM_UTF8( (char*) aLine );
return false;
}
m_Layer = LAYER_WIRE;
if( Name1[0] == 'B' )
m_Layer = LAYER_BUS;
if( !aLine.ReadLine() || sscanf( (char*) aLine, "%d %d %d %d ", &m_Pos.x, &m_Pos.y,
&m_Size.x, &m_Size.y ) != 4 )
{
aErrorMsg.Printf( wxT( "EESchema file bus entry load error at line %d" ),
aLine.LineNumber() );
aErrorMsg << wxT( "\n" ) << CONV_FROM_UTF8( (char*) aLine );
return false;
}
m_Size.x -= m_Pos.x;
m_Size.y -= m_Pos.y;
return true;
}
EDA_Rect SCH_BUS_ENTRY::GetBoundingBox() const
{
EDA_Rect box;
box.SetOrigin( m_Pos );
box.SetEnd( m_End() );
box.Normalize();
int width = ( m_Width == 0 ) ? g_DrawDefaultLineThickness : m_Width;
box.Inflate( width / 2 );
return box;
}
int SCH_BUS_ENTRY::GetPenSize() const
{
int pensize = ( m_Width == 0 ) ? g_DrawDefaultLineThickness : m_Width;
if( m_Layer == LAYER_BUS && m_Width == 0 )
{
pensize = wxRound( g_DrawDefaultLineThickness * BUS_WIDTH_EXPAND );
pensize = MAX( pensize, 3 );
}
return pensize;
}
void SCH_BUS_ENTRY::Draw( WinEDA_DrawPanel* aPanel, wxDC* aDC, const wxPoint& aOffset,
int aDrawMode, int aColor )
{
int color;
if( aColor >= 0 )
color = aColor;
else
color = ReturnLayerColor( m_Layer );
GRSetDrawMode( aDC, aDrawMode );
GRLine( &aPanel->m_ClipBox, aDC, m_Pos.x + aOffset.x, m_Pos.y + aOffset.y,
m_End().x + aOffset.x, m_End().y + aOffset.y, GetPenSize(), color );
}
void SCH_BUS_ENTRY::Mirror_X( int aXaxis_position )
{
m_Pos.y -= aXaxis_position;
NEGATE( m_Pos.y );
m_Pos.y += aXaxis_position;
NEGATE( m_Size.y );
}
void SCH_BUS_ENTRY::Mirror_Y( int aYaxis_position )
{
m_Pos.x -= aYaxis_position;
NEGATE( m_Pos.x );
m_Pos.x += aYaxis_position;
NEGATE( m_Size.x );
}
void SCH_BUS_ENTRY::Rotate( wxPoint rotationPoint )
{
RotatePoint( &m_Pos, rotationPoint, 900 );
RotatePoint( &m_Size.x, &m_Size.y, 900 );
}
void SCH_BUS_ENTRY::GetEndPoints( std::vector< DANGLING_END_ITEM >& aItemList )
{
DANGLING_END_ITEM item( ENTRY_END, this );
item.m_Pos = m_Pos;
DANGLING_END_ITEM item1( ENTRY_END, this );
item1.m_Pos = m_End();
aItemList.push_back( item );
aItemList.push_back( item1 );
}
bool SCH_BUS_ENTRY::IsSelectStateChanged( const wxRect& aRect )
{
bool previousState = IsSelected();
// If either end of the bus entry is inside the selection rectangle, the entire
// bus entry is selected. Bus entries have a fixed length and angle.
if( aRect.Contains( m_Pos ) || aRect.Contains( m_End() ) )
m_Flags |= SELECTED;
else
m_Flags &= ~SELECTED;
return previousState != IsSelected();
}
void SCH_BUS_ENTRY::GetConnectionPoints( vector< wxPoint >& aPoints ) const
{
aPoints.push_back( m_Pos );
aPoints.push_back( m_End() );
}
bool SCH_BUS_ENTRY::doHitTest( const wxPoint& aPoint, int aAccuracy, SCH_FILTER_T aFilter ) const
{
if( !( aFilter & BUS_ENTRY_T ) )
return false;
return TestSegmentHit( aPoint, m_Pos, m_End(), aAccuracy );
}
bool SCH_BUS_ENTRY::doHitTest( const EDA_Rect& aRect, bool aContained, int aAccuracy ) const
{
EDA_Rect rect = aRect;
rect.Inflate( aAccuracy );
if( aContained )
return rect.Contains( GetBoundingBox() );
return rect.Intersects( GetBoundingBox() );
}

115
eeschema/sch_bus_entry.h Normal file
View File

@ -0,0 +1,115 @@
/**
* @file sch_bus_entry.h
*
*/
#ifndef _SCH_BUS_ENTRY_H_
#define _SCH_BUS_ENTRY_H_
#include "sch_item_struct.h"
/* Flags for BUS ENTRY (bus to bus or wire to bus */
#define WIRE_TO_BUS 0
#define BUS_TO_BUS 1
/**
* Class SCH_BUS_ENTRY
*
* Defines a bus or wire entry.
*/
class SCH_BUS_ENTRY : public SCH_ITEM
{
public:
int m_Width;
wxPoint m_Pos;
wxSize m_Size;
public:
SCH_BUS_ENTRY( const wxPoint& pos = wxPoint( 0, 0 ), int shape = '\\', int id = WIRE_TO_BUS );
SCH_BUS_ENTRY( const SCH_BUS_ENTRY& aBusEntry );
~SCH_BUS_ENTRY() { }
virtual wxString GetClass() const
{
return wxT( "SCH_BUS_ENTRY" );
}
wxPoint m_End() const;
virtual void Draw( WinEDA_DrawPanel* aPanel, wxDC* aDC, const wxPoint& aOffset,
int aDrawMode, int aColor = -1 );
/**
* Function Save
* writes the data structures for this object out to a FILE in "*.sch"
* format.
* @param aFile The FILE to write to.
* @return bool - true if success writing else false.
*/
bool Save( FILE* aFile ) const;
/**
* Load schematic bus entry from \a aLine in a .sch file.
*
* @param aLine - Essentially this is file to read schematic bus entry from.
* @param aErrorMsg - Description of the error if an error occurs while loading the
* schematic bus entry.
* @return True if the schematic bus entry loaded successfully.
*/
virtual bool Load( LINE_READER& aLine, wxString& aErrorMsg );
/**
* Function GetBoundingBox
* returns the orthogonal, bounding box of this object for display
* purposes. This box should be an enclosing perimeter for visible
* components of this object, and the units should be in the pcb or
* schematic coordinate system. It is OK to overestimate the size
* by a few counts.
*/
EDA_Rect GetBoundingBox() const;
/**
* Function GetPenSize
* @return the size of the "pen" that be used to draw or plot this item
*/
virtual int GetPenSize() const;
/**
* Function Move
* moves and item to a new position by \a aMoveVector.
* @param aMoveVector The displacement vector.
*/
virtual void Move( const wxPoint& aMoveVector )
{
m_Pos += aMoveVector;
}
/**
* Function Mirror_Y
* mirrors the item relative to \a aYaxis_position.
* @param aYaxis_position The Y axis coordinate to mirror around.
*/
virtual void Mirror_Y( int aYaxis_position );
virtual void Mirror_X( int aXaxis_position );
virtual void Rotate( wxPoint rotationPoint );
virtual void GetEndPoints( std::vector <DANGLING_END_ITEM>& aItemList );
virtual bool IsSelectStateChanged( const wxRect& aRect );
virtual void GetConnectionPoints( vector< wxPoint >& aPoints ) const;
private:
virtual bool doHitTest( const wxPoint& aPoint, int aAccuracy, SCH_FILTER_T aFilter ) const;
virtual bool doHitTest( const EDA_Rect& aRect, bool aContained, int aAccuracy ) const;
virtual EDA_ITEM* doClone() const;
};
#endif // _SCH_BUS_ENTRY_H_

View File

@ -130,20 +130,21 @@ SCH_COMPONENT::SCH_COMPONENT( LIB_COMPONENT& libComponent, SCH_SHEET_PATH* sheet
} }
SCH_COMPONENT::SCH_COMPONENT( const SCH_COMPONENT& aTemplate ) : SCH_COMPONENT::SCH_COMPONENT( const SCH_COMPONENT& aComponent ) :
SCH_ITEM( NULL, SCH_COMPONENT_T ) SCH_ITEM( aComponent )
{ {
/* assignment of all fields, including field vector elements, and linked m_Parent = aComponent.m_Parent;
* list pointers */ m_Pos = aComponent.m_Pos;
*this = aTemplate; m_unit = aComponent.m_unit;
m_convert = aComponent.m_convert;
m_ChipName = aComponent.m_ChipName;
m_TimeStamp = aComponent.m_TimeStamp;
m_transform = aComponent.m_transform;
m_prefix = aComponent.m_prefix;
m_PathsAndReferences = aComponent.m_PathsAndReferences;
m_Fields = aComponent.m_Fields;
/* set linked list pointers to null, before this they were copies of // Re-parent the fields, which before this had aComponent as parent
* aTemplate's */
Pback = NULL;
Pnext = NULL;
m_Son = NULL;
// Re-parent the fields, which before this had aTemplate as parent
for( int i = 0; i<GetFieldCount(); ++i ) for( int i = 0; i<GetFieldCount(); ++i )
{ {
GetField( i )->SetParent( this ); GetField( i )->SetParent( this );
@ -180,6 +181,12 @@ void SCH_COMPONENT::Init( const wxPoint& pos )
} }
EDA_ITEM* SCH_COMPONENT::doClone() const
{
return new SCH_COMPONENT( *this );
}
void SCH_COMPONENT::SetLibName( const wxString& aName ) void SCH_COMPONENT::SetLibName( const wxString& aName )
{ {
if( m_ChipName != aName ) if( m_ChipName != aName )
@ -273,18 +280,18 @@ void SCH_COMPONENT::Draw( WinEDA_DrawPanel* panel, wxDC* DC, const wxPoint& offs
{ {
EDA_Rect BoundaryBox; EDA_Rect BoundaryBox;
BoundaryBox = GetBoundingBox(); BoundaryBox = GetBoundingBox();
GRRect( &panel->m_ClipBox, DC, BoundaryBox, BROWN ); GRRect( &panel->m_ClipBox, DC, BoundaryBox, 0, BROWN );
#if 1 #if 1
if( GetField( REFERENCE )->IsVisible() ) if( GetField( REFERENCE )->IsVisible() )
{ {
BoundaryBox = GetField( REFERENCE )->GetBoundingBox(); BoundaryBox = GetField( REFERENCE )->GetBoundingBox();
GRRect( &panel->m_ClipBox, DC, BoundaryBox, BROWN ); GRRect( &panel->m_ClipBox, DC, BoundaryBox, 0, BROWN );
} }
if( GetField( VALUE )->IsVisible() ) if( GetField( VALUE )->IsVisible() )
{ {
BoundaryBox = GetField( VALUE )->GetBoundingBox(); BoundaryBox = GetField( VALUE )->GetBoundingBox();
GRRect( &panel->m_ClipBox, DC, BoundaryBox, BROWN ); GRRect( &panel->m_ClipBox, DC, BoundaryBox, 0, BROWN );
} }
#endif #endif
} }
@ -1367,6 +1374,7 @@ EDA_Rect SCH_COMPONENT::GetBodyBoundingBox() const
// H and W must be > 0: // H and W must be > 0:
if( x2 < x1 ) if( x2 < x1 )
EXCHG( x2, x1 ); EXCHG( x2, x1 );
if( y2 < y1 ) if( y2 < y1 )
EXCHG( y2, y1 ); EXCHG( y2, y1 );
@ -1649,7 +1657,7 @@ LIB_DRAW_ITEM* SCH_COMPONENT::GetDrawItem( const wxPoint& aPosition, KICAD_T aTy
} }
bool SCH_COMPONENT::DoHitTest( const wxPoint& aPoint, int aAccuracy, SCH_FILTER_T aFilter ) const bool SCH_COMPONENT::doHitTest( const wxPoint& aPoint, int aAccuracy, SCH_FILTER_T aFilter ) const
{ {
EDA_Rect bBox; EDA_Rect bBox;
@ -1664,7 +1672,7 @@ bool SCH_COMPONENT::DoHitTest( const wxPoint& aPoint, int aAccuracy, SCH_FILTER_
bBox = GetField( ii )->GetBoundingBox(); bBox = GetField( ii )->GetBoundingBox();
bBox.Inflate( aAccuracy ); bBox.Inflate( aAccuracy );
if( bBox.Inside( aPoint ) ) if( bBox.Contains( aPoint ) )
return true; return true;
} }
} }
@ -1674,7 +1682,7 @@ bool SCH_COMPONENT::DoHitTest( const wxPoint& aPoint, int aAccuracy, SCH_FILTER_
bBox = GetBodyBoundingBox(); bBox = GetBodyBoundingBox();
bBox.Inflate( aAccuracy ); bBox.Inflate( aAccuracy );
if( bBox.Inside( aPoint ) ) if( bBox.Contains( aPoint ) )
return true; return true;
} }
@ -1682,20 +1690,20 @@ bool SCH_COMPONENT::DoHitTest( const wxPoint& aPoint, int aAccuracy, SCH_FILTER_
} }
bool SCH_COMPONENT::DoHitTest( const EDA_Rect& aRect, bool aContained, int aAccuracy ) const bool SCH_COMPONENT::doHitTest( const EDA_Rect& aRect, bool aContained, int aAccuracy ) const
{ {
EDA_Rect rect = aRect; EDA_Rect rect = aRect;
rect.Inflate( aAccuracy ); rect.Inflate( aAccuracy );
if( aContained ) if( aContained )
return rect.Inside( GetBoundingBox() ); return rect.Contains( GetBoundingBox() );
return rect.Intersects( GetBoundingBox() ); return rect.Intersects( GetBoundingBox() );
} }
bool SCH_COMPONENT::DoIsConnected( const wxPoint& aPosition ) const bool SCH_COMPONENT::doIsConnected( const wxPoint& aPosition ) const
{ {
vector< wxPoint > pts; vector< wxPoint > pts;

View File

@ -60,14 +60,11 @@ class SCH_COMPONENT : public SCH_ITEM
TRANSFORM m_transform; ///< The rotation/mirror transformation matrix. TRANSFORM m_transform; ///< The rotation/mirror transformation matrix.
SCH_FIELDS m_Fields; ///< Variable length list of fields. SCH_FIELDS m_Fields; ///< Variable length list of fields.
/* Hierarchical references. /**
* format is * Defines the hierarchical path and reference of the component. This allowa support
* path reference multi * for hierarchical sheets that reference the same schematic. The foramt for the path
* with: * is /&ltsheet time stamp&gt/&ltsheet time stamp&gt/... A single / denotes the root
* path = /<timestamp1>/<timestamp2> (subsheet path, = / for the root sheet) * sheet.
* reference = reference for this path (C23, R5, U78 ... )
* multi = part selection in multi parts per package (0 or 1 for one part
* per package)
*/ */
wxArrayString m_PathsAndReferences; wxArrayString m_PathsAndReferences;
@ -103,12 +100,12 @@ public:
/** /**
* Copy Constructor * Copy Constructor
* clones \a aTemplate into this object. All fields are copied as is except * clones \a aComponent into a new object. All fields are copied as is except
* for the linked list management pointers which are set to NULL, and the * for the linked list management pointers which are set to NULL, and the
* SCH_FIELD's m_Parent pointers which are set to the new parent, * SCH_FIELD's m_Parent pointers which are set to the new parent,
* i.e. this new object. * i.e. this new object.
*/ */
SCH_COMPONENT( const SCH_COMPONENT& aTemplate ); SCH_COMPONENT( const SCH_COMPONENT& aComponent );
~SCH_COMPONENT() { } ~SCH_COMPONENT() { }
@ -152,16 +149,6 @@ public:
*/ */
virtual bool Load( LINE_READER& aLine, wxString& aErrorMsg ); virtual bool Load( LINE_READER& aLine, wxString& aErrorMsg );
/**
* Function GenCopy
* returns a copy of this object but with the linked list pointers set to NULL.
* @return SCH_COMPONENT* - a copy of me.
*/
SCH_COMPONENT* GenCopy() const
{
return new SCH_COMPONENT( *this );
}
/** /**
* Function SetOrientation * Function SetOrientation
* computes the new transform matrix based on \a aOrientation for the component which is * computes the new transform matrix based on \a aOrientation for the component which is
@ -260,7 +247,6 @@ public:
m_Fields = aFields; // vector copying, length is changed possibly m_Fields = aFields; // vector copying, length is changed possibly
} }
//-----</Fields>---------------------------------------------------------- //-----</Fields>----------------------------------------------------------
/** /**
@ -409,9 +395,10 @@ public:
#endif #endif
private: private:
virtual bool DoHitTest( const wxPoint& aPoint, int aAccuracy, SCH_FILTER_T aFilter ) const; virtual bool doHitTest( const wxPoint& aPoint, int aAccuracy, SCH_FILTER_T aFilter ) 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 bool DoIsConnected( const wxPoint& aPosition ) const; virtual bool doIsConnected( const wxPoint& aPosition ) const;
virtual EDA_ITEM* doClone() const;
}; };

View File

@ -29,8 +29,7 @@
#include "template_fieldnames.h" #include "template_fieldnames.h"
SCH_FIELD::SCH_FIELD( const wxPoint& aPos, int aFieldId, SCH_FIELD::SCH_FIELD( const wxPoint& aPos, int aFieldId, SCH_COMPONENT* aParent, wxString aName ) :
SCH_COMPONENT* aParent, wxString aName ) :
SCH_ITEM( aParent, SCH_FIELD_T ), SCH_ITEM( aParent, SCH_FIELD_T ),
EDA_TextStruct() EDA_TextStruct()
{ {
@ -44,15 +43,27 @@ SCH_FIELD::SCH_FIELD( const wxPoint& aPos, int aFieldId,
} }
SCH_FIELD::SCH_FIELD( const SCH_FIELD& aField ) :
SCH_ITEM( aField ),
EDA_TextStruct( aField )
{
m_FieldId = aField.m_FieldId;
m_Name = aField.m_Name;
m_AddExtraText = aField.m_AddExtraText;
}
SCH_FIELD::~SCH_FIELD() SCH_FIELD::~SCH_FIELD()
{ {
} }
/** EDA_ITEM* SCH_FIELD::doClone() const
* Function GetPenSize {
* @return the size of the "pen" that be used to draw or plot this item return new SCH_FIELD( *this );
*/ }
int SCH_FIELD::GetPenSize() const int SCH_FIELD::GetPenSize() const
{ {
int pensize = m_Thickness; int pensize = m_Thickness;
@ -71,9 +82,6 @@ int SCH_FIELD::GetPenSize() const
} }
/**
* Draw schematic component fields.
*/
void SCH_FIELD::Draw( WinEDA_DrawPanel* panel, wxDC* DC, void SCH_FIELD::Draw( WinEDA_DrawPanel* panel, wxDC* DC,
const wxPoint& offset, int DrawMode, int Color ) const wxPoint& offset, int DrawMode, int Color )
{ {
@ -103,6 +111,7 @@ void SCH_FIELD::Draw( WinEDA_DrawPanel* panel, wxDC* DC,
/* Calculate the text orientation, according to the component /* Calculate the text orientation, according to the component
* orientation/mirror */ * orientation/mirror */
orient = m_Orient; orient = m_Orient;
if( parentComponent->GetTransform().y1 ) // Rotate component 90 degrees. if( parentComponent->GetTransform().y1 ) // Rotate component 90 degrees.
{ {
if( orient == TEXT_ORIENT_HORIZ ) if( orient == TEXT_ORIENT_HORIZ )
@ -136,9 +145,7 @@ void SCH_FIELD::Draw( WinEDA_DrawPanel* panel, wxDC* DC,
if( !m_AddExtraText || ( m_FieldId != REFERENCE ) ) if( !m_AddExtraText || ( m_FieldId != REFERENCE ) )
{ {
DrawGraphicText( panel, DC, textpos, color, m_Text, DrawGraphicText( panel, DC, textpos, color, m_Text, orient, m_Size, hjustify, vjustify,
orient,
m_Size, hjustify, vjustify,
LineWidth, m_Italic, m_Bold ); LineWidth, m_Italic, m_Bold );
} }
else else
@ -148,9 +155,7 @@ void SCH_FIELD::Draw( WinEDA_DrawPanel* panel, wxDC* DC,
wxString fulltext = m_Text; wxString fulltext = m_Text;
fulltext << LIB_COMPONENT::ReturnSubReference( parentComponent->GetUnit() ); fulltext << LIB_COMPONENT::ReturnSubReference( parentComponent->GetUnit() );
DrawGraphicText( panel, DC, textpos, color, fulltext, DrawGraphicText( panel, DC, textpos, color, fulltext, orient, m_Size, hjustify, vjustify,
orient,
m_Size, hjustify, vjustify,
LineWidth, m_Italic, m_Bold ); LineWidth, m_Italic, m_Bold );
} }
@ -182,13 +187,6 @@ void SCH_FIELD::Draw( WinEDA_DrawPanel* panel, wxDC* DC,
} }
/**
* Function ImportValues
* copy parameters from a source.
* Pointers and specific values (position, texts) are not copied
* used to init a field from the model read from a lib entry
* @param aSource = the LIB_FIELD to read
*/
void SCH_FIELD::ImportValues( const LIB_FIELD& aSource ) void SCH_FIELD::ImportValues( const LIB_FIELD& aSource )
{ {
m_Orient = aSource.m_Orient; m_Orient = aSource.m_Orient;
@ -203,32 +201,23 @@ void SCH_FIELD::ImportValues( const LIB_FIELD& aSource )
} }
/** void SCH_FIELD::SwapData( SCH_FIELD* aField )
* Used if undo / redo command:
* swap data between this and copyitem
*/
void SCH_FIELD::SwapData( SCH_FIELD* copyitem )
{ {
EXCHG( m_Text, copyitem->m_Text ); EXCHG( m_Text, aField->m_Text );
EXCHG( m_Layer, copyitem->m_Layer ); EXCHG( m_Layer, aField->m_Layer );
EXCHG( m_Pos, copyitem->m_Pos ); EXCHG( m_Pos, aField->m_Pos );
EXCHG( m_Size, copyitem->m_Size ); EXCHG( m_Size, aField->m_Size );
EXCHG( m_Thickness, copyitem->m_Thickness ); EXCHG( m_Thickness, aField->m_Thickness );
EXCHG( m_Orient, copyitem->m_Orient ); EXCHG( m_Orient, aField->m_Orient );
EXCHG( m_Mirror, copyitem->m_Mirror ); EXCHG( m_Mirror, aField->m_Mirror );
EXCHG( m_Attributs, copyitem->m_Attributs ); EXCHG( m_Attributs, aField->m_Attributs );
EXCHG( m_Italic, copyitem->m_Italic ); EXCHG( m_Italic, aField->m_Italic );
EXCHG( m_Bold, copyitem->m_Bold ); EXCHG( m_Bold, aField->m_Bold );
EXCHG( m_HJustify, copyitem->m_HJustify ); EXCHG( m_HJustify, aField->m_HJustify );
EXCHG( m_VJustify, copyitem->m_VJustify ); EXCHG( m_VJustify, aField->m_VJustify );
} }
/**
* Function GetBoundaryBox
* @return an EDA_Rect contains the real (user coordinates) boundary box for a text field.
* according to the component position, rotation, mirror ...
*/
EDA_Rect SCH_FIELD::GetBoundingBox() const EDA_Rect SCH_FIELD::GetBoundingBox() const
{ {
EDA_Rect BoundaryBox; EDA_Rect BoundaryBox;
@ -459,7 +448,7 @@ void SCH_FIELD::Rotate( wxPoint rotationPoint )
} }
bool SCH_FIELD::DoHitTest( const wxPoint& aPoint, int aAccuracy ) const bool SCH_FIELD::doHitTest( const wxPoint& aPoint, int aAccuracy ) const
{ {
// Do not hit test hidden fields. // Do not hit test hidden fields.
if( !IsVisible() ) if( !IsVisible() )
@ -469,11 +458,11 @@ bool SCH_FIELD::DoHitTest( const wxPoint& aPoint, int aAccuracy ) const
rect.Inflate( aAccuracy ); rect.Inflate( aAccuracy );
return rect.Inside( aPoint ); return rect.Contains( aPoint );
} }
bool SCH_FIELD::DoHitTest( const EDA_Rect& aRect, bool aContained, int aAccuracy ) const bool SCH_FIELD::doHitTest( const EDA_Rect& aRect, bool aContained, int aAccuracy ) const
{ {
// Do not hit test hidden fields. // Do not hit test hidden fields.
if( !IsVisible() ) if( !IsVisible() )
@ -484,7 +473,7 @@ bool SCH_FIELD::DoHitTest( const EDA_Rect& aRect, bool aContained, int aAccuracy
rect.Inflate( aAccuracy ); rect.Inflate( aAccuracy );
if( aContained ) if( aContained )
return rect.Inside( GetBoundingBox() ); return rect.Contains( GetBoundingBox() );
return rect.Intersects( GetBoundingBox() ); return rect.Intersects( GetBoundingBox() );
} }

View File

@ -5,14 +5,6 @@
#ifndef CLASS_SCH_FIELD_H #ifndef CLASS_SCH_FIELD_H
#define CLASS_SCH_FIELD_H #define CLASS_SCH_FIELD_H
/* Fields are texts attached to a component, having a special meaning
* Fields 0 and 1 are very important: reference and value
* Field 2 is used as default footprint name.
* Field 3 is reserved (not currently used
* Fields 4 and more are user fields.
* They can be renamed and can appear in reports
*/
#include "sch_item_struct.h" #include "sch_item_struct.h"
#include "general.h" #include "general.h"
@ -25,11 +17,16 @@ class LIB_FIELD;
/** /**
* Class SCH_FIELD * Class SCH_FIELD
* instances are attached to a component and provide a place for the * instances are attached to a component and provide a place for the component's value,
* component's value, * reference designator, footprint, and user definable name-value pairs of arbitrary purpose.
* reference designator, footprint, and user definable name-value pairs of *
* arbitrary purpose. * <ul> <li>Field 0 is reserved for the component reference.</li>
* <li>Field 1 is reserved for the component value.</li>
* <li>Field 2 is reserved for the component footprint.</li>
* <li>Field 3 is reserved for the component data sheet file.</li>
* <li>Fields 4 and higher are user defineable.</li></ul>
*/ */
class SCH_FIELD : public SCH_ITEM, public EDA_TextStruct class SCH_FIELD : public SCH_ITEM, public EDA_TextStruct
{ {
public: public:
@ -44,6 +41,8 @@ public:
SCH_FIELD( const wxPoint& aPos, int aFieldId, SCH_COMPONENT* aParent, SCH_FIELD( const wxPoint& aPos, int aFieldId, SCH_COMPONENT* aParent,
wxString aName = wxEmptyString ); wxString aName = wxEmptyString );
SCH_FIELD( const SCH_FIELD& aField );
~SCH_FIELD(); ~SCH_FIELD();
virtual wxString GetClass() const virtual wxString GetClass() const
@ -66,8 +65,13 @@ public:
return len == 0 || ( len == 1 && m_Text[0] == wxChar( '~' ) ); return len == 0 || ( len == 1 && m_Text[0] == wxChar( '~' ) );
} }
/**
void SwapData( SCH_FIELD* copyitem ); * Function SwapData
* exchanges the date between the field and \a aField.
*
* @param aField The field to exchange data with.
*/
void SwapData( SCH_FIELD* aField );
/** /**
* Function ImportValues * Function ImportValues
@ -160,8 +164,9 @@ public:
void* aAuxData, wxPoint * aFindLocation ); void* aAuxData, wxPoint * aFindLocation );
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;
}; };

File diff suppressed because it is too large Load Diff

View File

@ -1,412 +1,14 @@
/************************************************************************/ /**
/* classes to handle items used in schematic: wires, bus, junctions ... */ * @file sch_item.h
/************************************************************************/ *
*/
#ifndef CLASS_SCHEMATIC_ITEMS_H #ifndef _SCH_ITEMS_H_
#define CLASS_SCHEMATIC_ITEMS_H #define _SCH_ITEMS_H_
#include "sch_item_struct.h" #include "sch_item_struct.h"
#include "general.h"
/* Flags for BUS ENTRY (bus to bus or wire to bus */
#define WIRE_TO_BUS 0
#define BUS_TO_BUS 1
/**
* Class SCH_LINE
* is a segment description base class to describe items which have 2 end
* points (track, wire, draw line ...)
*/
class SCH_LINE : public SCH_ITEM
{
public:
int m_Width; // 0 = line, > 0 = tracks, bus ...
wxPoint m_Start; // Line start point
wxPoint m_End; // Line end point
bool m_StartIsDangling;
bool m_EndIsDangling; // TRUE if not connected (wires, tracks...)
public:
SCH_LINE( const wxPoint& pos = wxPoint( 0, 0 ), int layer = LAYER_NOTES );
~SCH_LINE() { }
SCH_LINE* Next() const { return (SCH_LINE*) Pnext; }
SCH_LINE* Back() const { return (SCH_LINE*) Pback; }
virtual wxString GetClass() const
{
return wxT( "SCH_LINE" );
}
bool IsEndPoint( const wxPoint& aPoint ) const
{
return aPoint == m_Start || aPoint == m_End;
}
SCH_LINE* GenCopy();
bool IsNull() const { return m_Start == m_End; }
/**
* Function GetBoundingBox
* returns the orthogonal, bounding box of this object for display purposes.
* This box should be an enclosing perimeter for visible components of this
* object, and the units should be in the pcb or schematic coordinate system.
* It is OK to overestimate the size by a few counts.
*/
EDA_Rect GetBoundingBox() const;
virtual void Draw( WinEDA_DrawPanel* aPanel, wxDC* aDC, const wxPoint& aOffset,
int aDrawMode, int aColor = -1 );
/**
* Function Save
* writes the data structures for this object out to a FILE in "*.sch" format.
* @param aFile The FILE to write to.
* @return bool - true if success writing else false.
*/
bool Save( FILE* aFile ) const;
/**
* Load schematic line from \a aLine in a .sch file.
*
* @param aLine - Essentially this is file to read schematic line from.
* @param aErrorMsg - Description of the error if an error occurs while loading the
* schematic line.
* @return True if the schematic line loaded successfully.
*/
virtual bool Load( LINE_READER& aLine, wxString& aErrorMsg );
/**
* Function GetPenSize
* @return the size of the "pen" that be used to draw or plot this item
*/
virtual int GetPenSize() const;
// Geometric transforms (used in block operations):
/** virtual function Move
* move item to a new position.
* @param aMoveVector = the displacement vector
*/
virtual void Move( const wxPoint& aMoveVector );
virtual void Mirror_X( int aXaxis_position );
/** virtual function Mirror_Y
* mirror item relative to an Y axis
* @param aYaxis_position = the y axis position
*/
virtual void Mirror_Y( int aYaxis_position );
virtual void Rotate( wxPoint rotationPoint );
/**
* Check line against \a aLine to see if it overlaps and merge if it does.
*
* This method will change the line to be equivalent of the line and \a aLine if the
* two lines overlap. This method is used to merge multple line segments into a single
* line.
*
* @param aLine - Line to compare.
* @return True if lines overlap and the line was merged with \a aLine.
*/
bool MergeOverlap( SCH_LINE* aLine );
virtual void GetEndPoints( std::vector <DANGLING_END_ITEM>& aItemList );
virtual bool IsDanglingStateChanged( std::vector< DANGLING_END_ITEM >& aItemList );
virtual bool IsDangling() const { return m_StartIsDangling || m_EndIsDangling; }
virtual bool IsSelectStateChanged( const wxRect& aRect );
virtual void GetConnectionPoints( vector< wxPoint >& aPoints ) const;
#if defined(DEBUG)
void Show( int nestLevel, std::ostream& os ) const;
#endif
private:
virtual bool DoHitTest( const wxPoint& aPoint, int aAccuracy, SCH_FILTER_T aFilter ) const;
virtual bool DoHitTest( const EDA_Rect& aRect, bool aContained, int aAccuracy ) const;
virtual bool DoIsConnected( const wxPoint& aPosition ) const;
};
class SCH_NO_CONNECT : public SCH_ITEM
{
public:
wxPoint m_Pos; /* XY coordinates of NoConnect. */
wxSize m_Size; // size of this symbol
public:
SCH_NO_CONNECT( const wxPoint& pos = wxPoint( 0, 0 ) );
~SCH_NO_CONNECT() { }
virtual wxString GetClass() const
{
return wxT( "SCH_NO_CONNECT" );
}
SCH_NO_CONNECT* GenCopy();
/**
* Function GetPenSize
* @return the size of the "pen" that be used to draw or plot this item
*/
virtual int GetPenSize() const;
virtual void Draw( WinEDA_DrawPanel* aPanel, wxDC* aDC, const wxPoint& affset,
int aDrawMode, int aColor = -1 );
/**
* Function Save
* writes the data structures for this object out to a FILE in "*.sch"
* format.
* @param aFile The FILE to write to.
* @return bool - true if success writing else false.
*/
bool Save( FILE* aFile ) const;
/**
* Load schematic no connect entry from \a aLine in a .sch file.
*
* @param aLine - Essentially this is file to read schematic no connect from.
* @param aErrorMsg - Description of the error if an error occurs while loading the
* schematic no connect.
* @return True if the schematic no connect loaded successfully.
*/
virtual bool Load( LINE_READER& aLine, wxString& aErrorMsg );
/**
* Function GetBoundingBox
* returns the orthogonal, bounding box of this object for display
* purposes. This box should be an enclosing perimeter for visible
* components of this object, and the units should be in the pcb or
* schematic coordinate system. It is OK to overestimate the size
* by a few counts.
*/
EDA_Rect GetBoundingBox() const;
// Geometric transforms (used in block operations):
/** virtual function Move
* move item to a new position.
* @param aMoveVector = the displacement vector
*/
virtual void Move( const wxPoint& aMoveVector )
{
m_Pos += aMoveVector;
}
/** virtual function Mirror_Y
* mirror item relative to an Y axis
* @param aYaxis_position = the y axis position
*/
virtual void Mirror_Y( int aYaxis_position );
virtual void Mirror_X( int aXaxis_position );
virtual void Rotate( wxPoint rotationPoint );
virtual bool IsSelectStateChanged( const wxRect& aRect );
virtual void GetConnectionPoints( vector< wxPoint >& aPoints ) const;
private:
virtual bool DoHitTest( const wxPoint& aPoint, int aAccuracy, SCH_FILTER_T aFilter ) const;
virtual bool DoHitTest( const EDA_Rect& aRect, bool aContained, int aAccuracy ) const;
};
/**
* Class SCH_BUS_ENTRY
*
* Defines a bus or wire entry.
*/
class SCH_BUS_ENTRY : public SCH_ITEM
{
public:
int m_Width;
wxPoint m_Pos;
wxSize m_Size;
public:
SCH_BUS_ENTRY( const wxPoint& pos = wxPoint( 0, 0 ), int shape = '\\', int id = WIRE_TO_BUS );
~SCH_BUS_ENTRY() { }
virtual wxString GetClass() const
{
return wxT( "SCH_BUS_ENTRY" );
}
SCH_BUS_ENTRY* GenCopy();
wxPoint m_End() const;
virtual void Draw( WinEDA_DrawPanel* aPanel, wxDC* aDC, const wxPoint& aOffset,
int aDrawMode, int aColor = -1 );
/**
* Function Save
* writes the data structures for this object out to a FILE in "*.sch"
* format.
* @param aFile The FILE to write to.
* @return bool - true if success writing else false.
*/
bool Save( FILE* aFile ) const;
/**
* Load schematic bus entry from \a aLine in a .sch file.
*
* @param aLine - Essentially this is file to read schematic bus entry from.
* @param aErrorMsg - Description of the error if an error occurs while loading the
* schematic bus entry.
* @return True if the schematic bus entry loaded successfully.
*/
virtual bool Load( LINE_READER& aLine, wxString& aErrorMsg );
/**
* Function GetBoundingBox
* returns the orthogonal, bounding box of this object for display
* purposes. This box should be an enclosing perimeter for visible
* components of this object, and the units should be in the pcb or
* schematic coordinate system. It is OK to overestimate the size
* by a few counts.
*/
EDA_Rect GetBoundingBox() const;
/**
* Function GetPenSize
* @return the size of the "pen" that be used to draw or plot this item
*/
virtual int GetPenSize() const;
// Geometric transforms (used in block operations):
/** virtual function Move
* move item to a new position.
* @param aMoveVector = the displacement vector
*/
virtual void Move( const wxPoint& aMoveVector )
{
m_Pos += aMoveVector;
}
/** virtual function Mirror_Y
* mirror item relative to an Y axis
* @param aYaxis_position = the y axis position
*/
virtual void Mirror_Y( int aYaxis_position );
virtual void Mirror_X( int aXaxis_position );
virtual void Rotate( wxPoint rotationPoint );
virtual void GetEndPoints( std::vector <DANGLING_END_ITEM>& aItemList );
virtual bool IsSelectStateChanged( const wxRect& aRect );
virtual void GetConnectionPoints( vector< wxPoint >& aPoints ) const;
private:
virtual bool DoHitTest( const wxPoint& aPoint, int aAccuracy, SCH_FILTER_T aFilter ) const;
virtual bool DoHitTest( const EDA_Rect& aRect, bool aContained, int aAccuracy ) const;
};
class SCH_POLYLINE : public SCH_ITEM
{
public:
int m_Width; /* Thickness */
std::vector<wxPoint> m_PolyPoints; // list of points (>= 2)
public:
SCH_POLYLINE( int layer = LAYER_NOTES );
~SCH_POLYLINE();
virtual wxString GetClass() const
{
return wxT( "SCH_POLYLINE" );
}
SCH_POLYLINE* GenCopy();
virtual void Draw( WinEDA_DrawPanel* aPanel, wxDC* aDC, const wxPoint& aOffset,
int aDrawMode, int aColor = -1 );
/**
* Function Save
* writes the data structures for this object out to a FILE in "*.sch"
* format.
* @param aFile The FILE to write to.
* @return bool - true if success writing else false.
*/
bool Save( FILE* aFile ) const;
/**
* Load schematic poly line entry from \a aLine in a .sch file.
*
* @param aLine - Essentially this is file to read schematic poly line from.
* @param aErrorMsg - Description of the error if an error occurs while loading the
* schematic poly line.
* @return True if the schematic poly line loaded successfully.
*/
virtual bool Load( LINE_READER& aLine, wxString& aErrorMsg );
/**
* Function AddPoint
* add a corner to m_PolyPoints
*/
void AddPoint( const wxPoint& point )
{
m_PolyPoints.push_back( point );
}
/**
* Function GetCornerCount
* @return the number of corners
*/
unsigned GetCornerCount() const { return m_PolyPoints.size(); }
/**
* Function GetPenSize
* @return the size of the "pen" that be used to draw or plot this item
*/
virtual int GetPenSize() const;
// Geometric transforms (used in block operations):
/** virtual function Move
* move item to a new position.
* @param aMoveVector = the displacement vector
*/
virtual void Move( const wxPoint& aMoveVector )
{
for( unsigned ii = 0; ii < GetCornerCount(); ii++ )
m_PolyPoints[ii] += aMoveVector;
}
/** virtual function Mirror_Y
* mirror item relative to an Y axis
* @param aYaxis_position = the y axis position
*/
virtual void Mirror_Y( int aYaxis_position );
virtual void Mirror_X( int aXaxis_position );
virtual void Rotate( wxPoint rotationPoint );
private:
virtual bool DoHitTest( const wxPoint& aPoint, int aAccuracy, SCH_FILTER_T aFilter ) const;
virtual bool DoHitTest( const EDA_Rect& aRect, bool aContained, int aAccuracy ) const;
};
class SCH_JUNCTION : public SCH_ITEM class SCH_JUNCTION : public SCH_ITEM
{ {
@ -416,6 +18,9 @@ public:
public: public:
SCH_JUNCTION( const wxPoint& pos = wxPoint( 0, 0 ) ); SCH_JUNCTION( const wxPoint& pos = wxPoint( 0, 0 ) );
SCH_JUNCTION( const SCH_JUNCTION& aJunction );
~SCH_JUNCTION() { } ~SCH_JUNCTION() { }
virtual wxString GetClass() const virtual wxString GetClass() const
@ -457,24 +62,25 @@ public:
*/ */
virtual bool Load( LINE_READER& aLine, wxString& aErrorMsg ); virtual bool Load( LINE_READER& aLine, wxString& aErrorMsg );
// Geometric transforms (used in block operations): /**
* Function Move
/** virtual function Move * moves then item to a new position by \a aMoveVector.
* move item to a new position. * @param aMoveVector The displacement vector.
* @param aMoveVector = the displacement vector
*/ */
virtual void Move( const wxPoint& aMoveVector ) virtual void Move( const wxPoint& aMoveVector )
{ {
m_Pos += aMoveVector; m_Pos += aMoveVector;
} }
/**
/** virtual function Mirror_Y * Function Mirror_Y
* mirror item relative to an Y axis * mirrors the item relative to \a aYaxis_position.
* @param aYaxis_position = the y axis position * @param aYaxis_position = the y axis position
*/ */
virtual void Mirror_Y( int aYaxis_position ); virtual void Mirror_Y( int aYaxis_position );
virtual void Mirror_X( int aXaxis_position ); virtual void Mirror_X( int aXaxis_position );
virtual void Rotate( wxPoint rotationPoint ); virtual void Rotate( wxPoint rotationPoint );
virtual void GetEndPoints( std::vector <DANGLING_END_ITEM>& aItemList ); virtual void GetEndPoints( std::vector <DANGLING_END_ITEM>& aItemList );
@ -485,14 +91,14 @@ public:
#if defined(DEBUG) #if defined(DEBUG)
void Show( int nestLevel, std::ostream& os ); void Show( int nestLevel, std::ostream& os );
#endif #endif
private: private:
virtual bool DoHitTest( const wxPoint& aPoint, int aAccuracy, SCH_FILTER_T aFilter ) const; virtual bool doHitTest( const wxPoint& aPoint, int aAccuracy, SCH_FILTER_T aFilter ) 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 bool DoIsConnected( const wxPoint& aPosition ) const; virtual bool doIsConnected( const wxPoint& aPosition ) const;
virtual EDA_ITEM* doClone() const;
}; };
#endif /* CLASS_SCHEMATIC_ITEMS_H */ #endif // _SCH_ITEMS_H_

429
eeschema/sch_line.cpp Normal file
View File

@ -0,0 +1,429 @@
/******************/
/* Class SCH_LINE */
/******************/
#include "fctsys.h"
#include "gr_basic.h"
#include "macros.h"
#include "class_drawpanel.h"
#include "trigo.h"
#include "richio.h"
#include "general.h"
#include "protos.h"
#include "sch_line.h"
#include <boost/foreach.hpp>
SCH_LINE::SCH_LINE( const wxPoint& pos, int layer ) :
SCH_ITEM( NULL, SCH_LINE_T )
{
m_Start = pos;
m_End = pos;
m_Width = 0; // Default thickness used
m_StartIsDangling = m_EndIsDangling = FALSE;
switch( layer )
{
default:
m_Layer = LAYER_NOTES;
break;
case LAYER_WIRE:
m_Layer = LAYER_WIRE;
break;
case LAYER_BUS:
m_Layer = LAYER_BUS;
break;
}
}
SCH_LINE::SCH_LINE( const SCH_LINE& aLine ) :
SCH_ITEM( aLine )
{
m_Start = aLine.m_Start;
m_End = aLine.m_End;
m_Width = aLine.m_Width;
m_StartIsDangling = m_EndIsDangling = false;
}
EDA_ITEM* SCH_LINE::doClone() const
{
return new SCH_LINE( *this );
}
void SCH_LINE::Move( const wxPoint& aOffset )
{
if( (m_Flags & STARTPOINT) == 0 && aOffset != wxPoint( 0, 0 ) )
{
m_Start += aOffset;
SetModified();
}
if( (m_Flags & ENDPOINT) == 0 && aOffset != wxPoint( 0, 0 ) )
{
m_End += aOffset;
SetModified();
}
}
#if defined(DEBUG)
void SCH_LINE::Show( int nestLevel, std::ostream& os ) const
{
NestedSpace( nestLevel, os ) << '<' << GetClass().Lower().mb_str()
<< " layer=\"" << m_Layer << '"'
<< " width=\"" << m_Width << '"'
<< " startIsDangling=\"" << m_StartIsDangling
<< '"' << " endIsDangling=\""
<< m_EndIsDangling << '"' << ">"
<< " <start" << m_Start << "/>"
<< " <end" << m_End << "/>" << "</"
<< GetClass().Lower().mb_str() << ">\n";
}
#endif
EDA_Rect SCH_LINE::GetBoundingBox() const
{
int width = 25;
int xmin = MIN( m_Start.x, m_End.x ) - width;
int ymin = MIN( m_Start.y, m_End.y ) - width;
int xmax = MAX( m_Start.x, m_End.x ) + width;
int ymax = MAX( m_Start.y, m_End.y ) + width;
// return a rectangle which is [pos,dim) in nature. therefore the +1
EDA_Rect ret( wxPoint( xmin, ymin ), wxSize( xmax - xmin + 1, ymax - ymin + 1 ) );
return ret;
}
bool SCH_LINE::Save( FILE* aFile ) const
{
bool success = true;
const char* layer = "Notes";
const char* width = "Line";
if( GetLayer() == LAYER_WIRE )
layer = "Wire";
if( GetLayer() == LAYER_BUS )
layer = "Bus";
if( fprintf( aFile, "Wire %s %s\n", layer, width ) == EOF )
{
success = false;
}
if( fprintf( aFile, "\t%-4d %-4d %-4d %-4d\n", m_Start.x, m_Start.y,
m_End.x, m_End.y ) == EOF )
{
success = false;
}
return success;
}
bool SCH_LINE::Load( LINE_READER& aLine, wxString& aErrorMsg )
{
char Name1[256];
char Name2[256];
char* line = (char*) aLine;
while( (*line != ' ' ) && *line )
line++;
if( sscanf( line, "%s %s", Name1, Name2 ) != 2 )
{
aErrorMsg.Printf( wxT( "EESchema file segment error at line %d, aborted" ),
aLine.LineNumber() );
aErrorMsg << wxT( "\n" ) << CONV_FROM_UTF8( (char*) aLine );
return false;
}
m_Layer = LAYER_NOTES;
if( Name1[0] == 'W' )
m_Layer = LAYER_WIRE;
if( Name1[0] == 'B' )
m_Layer = LAYER_BUS;
if( !aLine.ReadLine() || sscanf( (char*) aLine, "%d %d %d %d ",
&m_Start.x, &m_Start.y, &m_End.x, &m_End.y ) != 4 )
{
aErrorMsg.Printf( wxT( "EESchema file Segment struct error at line %d, aborted" ),
aLine.LineNumber() );
aErrorMsg << wxT( "\n" ) << CONV_FROM_UTF8( (char*) aLine );
return false;
}
return true;
}
int SCH_LINE::GetPenSize() const
{
int pensize = ( m_Width == 0 ) ? g_DrawDefaultLineThickness : m_Width;
if( m_Layer == LAYER_BUS && m_Width == 0 )
{
pensize = wxRound( g_DrawDefaultLineThickness * BUS_WIDTH_EXPAND );
pensize = MAX( pensize, 3 );
}
return pensize;
}
void SCH_LINE::Draw( WinEDA_DrawPanel* panel, wxDC* DC, const wxPoint& offset,
int DrawMode, int Color )
{
int color;
int width = GetPenSize();
if( Color >= 0 )
color = Color;
else
color = ReturnLayerColor( m_Layer );
GRSetDrawMode( DC, DrawMode );
if( m_Layer == LAYER_NOTES )
GRDashedLine( &panel->m_ClipBox, DC, m_Start.x + offset.x,
m_Start.y + offset.y, m_End.x + offset.x,
m_End.y + offset.y, width, color );
else
GRLine( &panel->m_ClipBox, DC, m_Start.x + offset.x,
m_Start.y + offset.y, m_End.x + offset.x, m_End.y + offset.y,
width, color );
if( m_StartIsDangling )
DrawDanglingSymbol( panel, DC, m_Start + offset, color );
if( m_EndIsDangling )
DrawDanglingSymbol( panel, DC, m_End + offset, color );
}
void SCH_LINE::Mirror_X( int aXaxis_position )
{
m_Start.y -= aXaxis_position;
NEGATE( m_Start.y );
m_Start.y += aXaxis_position;
m_End.y -= aXaxis_position;
NEGATE( m_End.y );
m_End.y += aXaxis_position;
}
void SCH_LINE::Mirror_Y( int aYaxis_position )
{
m_Start.x -= aYaxis_position;
NEGATE( m_Start.x );
m_Start.x += aYaxis_position;
m_End.x -= aYaxis_position;
NEGATE( m_End.x );
m_End.x += aYaxis_position;
}
void SCH_LINE::Rotate( wxPoint rotationPoint )
{
RotatePoint( &m_Start, rotationPoint, 900 );
RotatePoint( &m_End, rotationPoint, 900 );
}
bool SCH_LINE::MergeOverlap( SCH_LINE* aLine )
{
wxCHECK_MSG( aLine != NULL && aLine->Type() == SCH_LINE_T, false,
wxT( "Cannot test line segment for overlap." ) );
if( this == aLine || GetLayer() != aLine->GetLayer() )
return false;
// Search for a common end, and modify coordinates to ensure RefSegm->m_End
// == TstSegm->m_Start
if( m_Start == aLine->m_Start )
{
if( m_End == aLine->m_End )
return true;
EXCHG( m_Start, m_End );
}
else if( m_Start == aLine->m_End )
{
EXCHG( m_Start, m_End );
EXCHG( aLine->m_Start, aLine->m_End );
}
else if( m_End == aLine->m_End )
{
EXCHG( aLine->m_Start, aLine->m_End );
}
else if( m_End != aLine->m_Start )
{
// No common end point, segments cannot be merged.
return false;
}
/* Test alignment: */
if( m_Start.y == m_End.y ) // Horizontal segment
{
if( aLine->m_Start.y == aLine->m_End.y )
{
m_End = aLine->m_End;
return true;
}
}
else if( m_Start.x == m_End.x ) // Vertical segment
{
if( aLine->m_Start.x == aLine->m_End.x )
{
m_End = aLine->m_End;
return true;
}
}
else
{
if( atan2( (double) ( m_Start.x - m_End.x ), (double) ( m_Start.y - m_End.y ) )
== atan2( (double) ( aLine->m_Start.x - aLine->m_End.x ),
(double) ( aLine->m_Start.y - aLine->m_End.y ) ) )
{
m_End = aLine->m_End;
return true;
}
}
return false;
}
void SCH_LINE::GetEndPoints( std::vector <DANGLING_END_ITEM>& aItemList )
{
if( GetLayer() == LAYER_NOTES )
return;
if( ( GetLayer() == LAYER_BUS ) || ( GetLayer() == LAYER_WIRE ) )
{
DANGLING_END_ITEM item( (GetLayer() == LAYER_BUS) ? BUS_START_END : WIRE_START_END, this );
item.m_Pos = m_Start;
DANGLING_END_ITEM item1( (GetLayer() == LAYER_BUS) ? BUS_END_END : WIRE_END_END, this );
item1.m_Pos = m_End;
aItemList.push_back( item );
aItemList.push_back( item1 );
}
}
bool SCH_LINE::IsDanglingStateChanged( std::vector< DANGLING_END_ITEM >& aItemList )
{
bool previousStartState = m_StartIsDangling;
bool previousEndState = m_EndIsDangling;
m_StartIsDangling = m_EndIsDangling = true;
if( GetLayer() == LAYER_WIRE )
{
BOOST_FOREACH( DANGLING_END_ITEM item, aItemList )
{
if( item.m_Item == this )
continue;
if( m_Start == item.m_Pos )
m_StartIsDangling = false;
if( m_End == item.m_Pos )
m_EndIsDangling = false;
if( (m_StartIsDangling == false) && (m_EndIsDangling == false) )
break;
}
}
else if( GetLayer() == LAYER_BUS || GetLayer() == LAYER_NOTES )
{
// Lines on the notes layer and the bus layer cannot be tested for dangling ends.
previousStartState = previousEndState = m_StartIsDangling = m_EndIsDangling = false;
}
return ( previousStartState != m_StartIsDangling ) || ( previousEndState != m_EndIsDangling );
}
bool SCH_LINE::IsSelectStateChanged( const wxRect& aRect )
{
bool previousState = IsSelected();
if( aRect.Contains( m_Start ) )
m_Flags |= STARTPOINT | SELECTED;
else
m_Flags &= ~( STARTPOINT | SELECTED );
if( aRect.Contains( m_End ) )
m_Flags |= ENDPOINT | SELECTED;
else
m_Flags &= ~( ENDPOINT | SELECTED );
return previousState != IsSelected();
}
void SCH_LINE::GetConnectionPoints( vector< wxPoint >& aPoints ) const
{
aPoints.push_back( m_Start );
aPoints.push_back( m_End );
}
bool SCH_LINE::doHitTest( const wxPoint& aPoint, int aAccuracy, SCH_FILTER_T aFilter ) const
{
if( !( aFilter & ( DRAW_ITEM_T | WIRE_T | BUS_T ) ) )
return false;
if( ( ( aFilter & DRAW_ITEM_T ) && ( m_Layer == LAYER_NOTES ) )
|| ( ( aFilter & WIRE_T ) && ( m_Layer == LAYER_WIRE ) )
|| ( ( aFilter & BUS_T ) && ( m_Layer == LAYER_BUS ) ) )
{
if( ( aFilter & EXCLUDE_WIRE_BUS_ENDPOINTS && IsEndPoint( aPoint ) )
|| ( aFilter & WIRE_BUS_ENDPOINTS_ONLY && !IsEndPoint( aPoint ) )
|| ( TestSegmentHit( aPoint, m_Start, m_End, aAccuracy ) ) )
return true;
}
return false;
}
bool SCH_LINE::doHitTest( const EDA_Rect& aRect, bool aContained, int aAccuracy ) const
{
EDA_Rect rect = aRect;
rect.Inflate( aAccuracy );
if( aContained )
return rect.Contains( GetBoundingBox() );
return rect.Intersects( GetBoundingBox() );
}
bool SCH_LINE::doIsConnected( const wxPoint& aPosition ) const
{
if( m_Layer != LAYER_WIRE && m_Layer != LAYER_BUS )
return false;
return IsEndPoint( aPosition );
}

136
eeschema/sch_line.h Normal file
View File

@ -0,0 +1,136 @@
/**
* @file sch_line.h
*
*/
#ifndef _SCH_LINE_H_
#define _SCH_LINE_H_
#include "sch_item_struct.h"
/**
* Class SCH_LINE
* is a segment description base class to describe items which have 2 end
* points (track, wire, draw line ...)
*/
class SCH_LINE : public SCH_ITEM
{
bool m_StartIsDangling;
bool m_EndIsDangling; // TRUE if not connected (wires, tracks...)
public:
int m_Width; // 0 = line, > 0 = tracks, bus ...
wxPoint m_Start; // Line start point
wxPoint m_End; // Line end point
public:
SCH_LINE( const wxPoint& pos = wxPoint( 0, 0 ), int layer = LAYER_NOTES );
SCH_LINE( const SCH_LINE& aLine );
~SCH_LINE() { }
SCH_LINE* Next() const { return (SCH_LINE*) Pnext; }
SCH_LINE* Back() const { return (SCH_LINE*) Pback; }
virtual wxString GetClass() const
{
return wxT( "SCH_LINE" );
}
bool IsEndPoint( const wxPoint& aPoint ) const
{
return aPoint == m_Start || aPoint == m_End;
}
bool IsNull() const { return m_Start == m_End; }
/**
* Function GetBoundingBox
* returns the orthogonal, bounding box of this object for display purposes.
* This box should be an enclosing perimeter for visible components of this
* object, and the units should be in the pcb or schematic coordinate system.
* It is OK to overestimate the size by a few counts.
*/
EDA_Rect GetBoundingBox() const;
virtual void Draw( WinEDA_DrawPanel* aPanel, wxDC* aDC, const wxPoint& aOffset,
int aDrawMode, int aColor = -1 );
/**
* Function Save
* writes the data structures for this object out to a FILE in "*.sch" format.
* @param aFile The FILE to write to.
* @return bool - true if success writing else false.
*/
bool Save( FILE* aFile ) const;
/**
* Load schematic line from \a aLine in a .sch file.
*
* @param aLine - Essentially this is file to read schematic line from.
* @param aErrorMsg - Description of the error if an error occurs while loading the
* schematic line.
* @return True if the schematic line loaded successfully.
*/
virtual bool Load( LINE_READER& aLine, wxString& aErrorMsg );
/**
* Function GetPenSize
* @return the size of the "pen" that be used to draw or plot this item
*/
virtual int GetPenSize() const;
/**
* Function Move
* moves the item by \a aMoveVector.
* @param aMoveVector The displacement vector
*/
virtual void Move( const wxPoint& aMoveVector );
virtual void Mirror_X( int aXaxis_position );
/**
* Function Mirror_Y
* mirrors the item relative to \a aYaxis_position.
* @param aYaxis_position = the y axis position
*/
virtual void Mirror_Y( int aYaxis_position );
virtual void Rotate( wxPoint rotationPoint );
/**
* Check line against \a aLine to see if it overlaps and merge if it does.
*
* This method will change the line to be equivalent of the line and \a aLine if the
* two lines overlap. This method is used to merge multple line segments into a single
* line.
*
* @param aLine - Line to compare.
* @return True if lines overlap and the line was merged with \a aLine.
*/
bool MergeOverlap( SCH_LINE* aLine );
virtual void GetEndPoints( std::vector <DANGLING_END_ITEM>& aItemList );
virtual bool IsDanglingStateChanged( std::vector< DANGLING_END_ITEM >& aItemList );
virtual bool IsDangling() const { return m_StartIsDangling || m_EndIsDangling; }
virtual bool IsSelectStateChanged( const wxRect& aRect );
virtual void GetConnectionPoints( vector< wxPoint >& aPoints ) const;
#if defined(DEBUG)
void Show( int nestLevel, std::ostream& os ) const;
#endif
private:
virtual bool doHitTest( const wxPoint& aPoint, int aAccuracy, SCH_FILTER_T aFilter ) const;
virtual bool doHitTest( const EDA_Rect& aRect, bool aContained, int aAccuracy ) const;
virtual bool doIsConnected( const wxPoint& aPosition ) const;
virtual EDA_ITEM* doClone() const;
};
#endif // _SCH_LINE_H_

View File

@ -44,19 +44,21 @@ SCH_MARKER::SCH_MARKER( const wxPoint& pos, const wxString& text ) :
} }
SCH_MARKER::SCH_MARKER( const SCH_MARKER& aMarker ) :
SCH_ITEM( aMarker ),
MARKER_BASE( aMarker )
{
}
SCH_MARKER::~SCH_MARKER() SCH_MARKER::~SCH_MARKER()
{ {
} }
SCH_MARKER* SCH_MARKER::GenCopy() EDA_ITEM* SCH_MARKER::doClone() const
{ {
SCH_MARKER* newitem = new SCH_MARKER( GetPos(), GetReporter().GetMainText() ); return new SCH_MARKER( *this );
newitem->SetMarkerType( GetMarkerType() );
newitem->SetErrorLevel( GetErrorLevel() );
return newitem;
} }
@ -76,7 +78,6 @@ void SCH_MARKER::Show( int nestLevel, std::ostream& os )
<< GetPos() << "/>\n"; << GetPos() << "/>\n";
} }
#endif #endif
/** /**
@ -194,7 +195,7 @@ bool SCH_MARKER::IsSelectStateChanged( const wxRect& aRect )
} }
bool SCH_MARKER::DoHitTest( const wxPoint& aPoint, int aAccuracy, SCH_FILTER_T aFilter ) const bool SCH_MARKER::doHitTest( const wxPoint& aPoint, int aAccuracy, SCH_FILTER_T aFilter ) const
{ {
if( !( aFilter & MARKER_T ) ) if( !( aFilter & MARKER_T ) )
return false; return false;

View File

@ -30,6 +30,7 @@ class SCH_MARKER : public SCH_ITEM, public MARKER_BASE
public: public:
SCH_MARKER(); SCH_MARKER();
SCH_MARKER( const wxPoint& aPos, const wxString& aText ); SCH_MARKER( const wxPoint& aPos, const wxString& aText );
SCH_MARKER( const SCH_MARKER& aMarker );
~SCH_MARKER(); ~SCH_MARKER();
virtual wxString GetClass() const virtual wxString GetClass() const
@ -37,11 +38,8 @@ public:
return wxT( "SCH_MARKER" ); return wxT( "SCH_MARKER" );
} }
SCH_MARKER* GenCopy(); virtual void Draw( WinEDA_DrawPanel* aPanel, wxDC* aDC, const wxPoint& aOffset,
int aDraw_mode, int aColor = -1 );
virtual void Draw( WinEDA_DrawPanel* aPanel, wxDC* aDC,
const wxPoint& aOffset, int aDraw_mode,
int aColor = -1 );
/** /**
* Function Save * Function Save
@ -104,7 +102,8 @@ public:
#endif #endif
virtual bool DoHitTest( const wxPoint& aPoint, int aAccuracy, SCH_FILTER_T aFilter ) const; virtual bool doHitTest( const wxPoint& aPoint, int aAccuracy, SCH_FILTER_T aFilter ) const;
virtual EDA_ITEM* doClone() const;
}; };
#endif /* _TYPE_SCH_MARKER_H_ */ #endif /* _TYPE_SCH_MARKER_H_ */

182
eeschema/sch_no_connect.cpp Normal file
View File

@ -0,0 +1,182 @@
/************************/
/* Class SCH_NO_CONNECT */
/************************/
#include "fctsys.h"
#include "gr_basic.h"
#include "macros.h"
#include "class_drawpanel.h"
#include "common.h"
#include "trigo.h"
#include "richio.h"
#include "general.h"
#include "protos.h"
#include "sch_no_connect.h"
SCH_NO_CONNECT::SCH_NO_CONNECT( const wxPoint& pos ) :
SCH_ITEM( NULL, SCH_NO_CONNECT_T )
{
#define DRAWNOCONNECT_SIZE 48 /* No symbol connection range. */
m_Pos = pos;
m_Size.x = m_Size.y = DRAWNOCONNECT_SIZE;
#undef DRAWNOCONNECT_SIZE
}
SCH_NO_CONNECT::SCH_NO_CONNECT( const SCH_NO_CONNECT& aNoConnect ) :
SCH_ITEM( aNoConnect )
{
m_Pos = aNoConnect.m_Pos;
m_Size = aNoConnect.m_Size;
}
EDA_ITEM* SCH_NO_CONNECT::doClone() const
{
return new SCH_NO_CONNECT( *this );
}
EDA_Rect SCH_NO_CONNECT::GetBoundingBox() const
{
int delta = ( GetPenSize() + m_Size.x ) / 2;
EDA_Rect box;
box.SetOrigin( m_Pos );
box.Inflate( delta );
return box;
}
bool SCH_NO_CONNECT::Save( FILE* aFile ) const
{
bool success = true;
if( fprintf( aFile, "NoConn ~ %-4d %-4d\n", m_Pos.x, m_Pos.y ) == EOF )
{
success = false;
}
return success;
}
bool SCH_NO_CONNECT::Load( LINE_READER& aLine, wxString& aErrorMsg )
{
char name[256];
char* line = (char*) aLine;
while( (*line != ' ' ) && *line )
line++;
if( sscanf( line, "%s %d %d", name, &m_Pos.x, &m_Pos.y ) != 3 )
{
aErrorMsg.Printf( wxT( "EESchema file No Connect load error at line %d" ),
aLine.LineNumber() );
aErrorMsg << wxT( "\n" ) << CONV_FROM_UTF8( ((char*)aLine) );
return false;
}
return true;
}
int SCH_NO_CONNECT::GetPenSize() const
{
return g_DrawDefaultLineThickness;
}
void SCH_NO_CONNECT::Draw( WinEDA_DrawPanel* aPanel, wxDC* aDC, const wxPoint& aOffset,
int aDrawMode, int aColor )
{
int pX, pY, color;
int delta = m_Size.x / 2;
int width = g_DrawDefaultLineThickness;
pX = m_Pos.x + aOffset.x;
pY = m_Pos.y + aOffset.y;
if( aColor >= 0 )
color = aColor;
else
color = ReturnLayerColor( LAYER_NOCONNECT );
GRSetDrawMode( aDC, aDrawMode );
GRLine( &aPanel->m_ClipBox, aDC, pX - delta, pY - delta, pX + delta, pY + delta, width, color );
GRLine( &aPanel->m_ClipBox, aDC, pX + delta, pY - delta, pX - delta, pY + delta, width, color );
}
void SCH_NO_CONNECT::Mirror_X( int aXaxis_position )
{
m_Pos.y -= aXaxis_position;
NEGATE( m_Pos.y );
m_Pos.y += aXaxis_position;
}
void SCH_NO_CONNECT::Mirror_Y( int aYaxis_position )
{
m_Pos.x -= aYaxis_position;
NEGATE( m_Pos.x );
m_Pos.x += aYaxis_position;
}
void SCH_NO_CONNECT::Rotate( wxPoint rotationPoint )
{
RotatePoint( &m_Pos, rotationPoint, 900 );
}
bool SCH_NO_CONNECT::IsSelectStateChanged( const wxRect& aRect )
{
bool previousState = IsSelected();
if( aRect.Contains( m_Pos ) )
m_Flags |= SELECTED;
else
m_Flags &= ~SELECTED;
return previousState != IsSelected();
}
void SCH_NO_CONNECT::GetConnectionPoints( vector< wxPoint >& aPoints ) const
{
aPoints.push_back( m_Pos );
}
bool SCH_NO_CONNECT::doHitTest( const wxPoint& aPoint, int aAccuracy, SCH_FILTER_T aFilter ) const
{
if( !( aFilter & NO_CONNECT_T ) )
return false;
int delta = ( ( m_Size.x + g_DrawDefaultLineThickness ) / 2 ) + aAccuracy;
wxPoint dist = aPoint - m_Pos;
if( ( ABS( dist.x ) <= delta ) && ( ABS( dist.y ) <= delta ) )
return true;
return false;
}
bool SCH_NO_CONNECT::doHitTest( const EDA_Rect& aRect, bool aContained, int aAccuracy ) const
{
EDA_Rect rect = aRect;
rect.Inflate( aAccuracy );
if( aContained )
return rect.Contains( GetBoundingBox() );
return rect.Intersects( GetBoundingBox() );
}

102
eeschema/sch_no_connect.h Normal file
View File

@ -0,0 +1,102 @@
/**
* @file sch_no_connect.h
*
*/
#ifndef _SCH_NO_CONNECT_H_
#define _SCH_NO_CONNECT_H_
#include "sch_item_struct.h"
class SCH_NO_CONNECT : public SCH_ITEM
{
public:
wxPoint m_Pos; /* XY coordinates of NoConnect. */
wxSize m_Size; // size of this symbol
public:
SCH_NO_CONNECT( const wxPoint& pos = wxPoint( 0, 0 ) );
SCH_NO_CONNECT( const SCH_NO_CONNECT& aNoConnect );
~SCH_NO_CONNECT() { }
virtual wxString GetClass() const
{
return wxT( "SCH_NO_CONNECT" );
}
/**
* Function GetPenSize
* @return the size of the "pen" that be used to draw or plot this item
*/
virtual int GetPenSize() const;
virtual void Draw( WinEDA_DrawPanel* aPanel, wxDC* aDC, const wxPoint& aOffset,
int aDrawMode, int aColor = -1 );
/**
* Function Save
* writes the data structures for this object out to a FILE in "*.sch"
* format.
* @param aFile The FILE to write to.
* @return bool - true if success writing else false.
*/
bool Save( FILE* aFile ) const;
/**
* Load schematic no connect entry from \a aLine in a .sch file.
*
* @param aLine - Essentially this is file to read schematic no connect from.
* @param aErrorMsg - Description of the error if an error occurs while loading the
* schematic no connect.
* @return True if the schematic no connect loaded successfully.
*/
virtual bool Load( LINE_READER& aLine, wxString& aErrorMsg );
/**
* Function GetBoundingBox
* returns the orthogonal, bounding box of this object for display
* purposes. This box should be an enclosing perimeter for visible
* components of this object, and the units should be in the pcb or
* schematic coordinate system. It is OK to overestimate the size
* by a few counts.
*/
EDA_Rect GetBoundingBox() const;
// Geometric transforms (used in block operations):
/** virtual function Move
* move item to a new position.
* @param aMoveVector = the displacement vector
*/
virtual void Move( const wxPoint& aMoveVector )
{
m_Pos += aMoveVector;
}
/**
* Function Mirror_Y
* mirrors item relative to \a aYaxis_position.
* @param aYaxis_position = the y axis position
*/
virtual void Mirror_Y( int aYaxis_position );
virtual void Mirror_X( int aXaxis_position );
virtual void Rotate( wxPoint rotationPoint );
virtual bool IsSelectStateChanged( const wxRect& aRect );
virtual void GetConnectionPoints( vector< wxPoint >& aPoints ) const;
private:
virtual bool doHitTest( const wxPoint& aPoint, int aAccuracy, SCH_FILTER_T aFilter ) const;
virtual bool doHitTest( const EDA_Rect& aRect, bool aContained, int aAccuracy ) const;
virtual EDA_ITEM* doClone() const;
};
#endif // _SCH_NO_CONNECT_H_

233
eeschema/sch_polyline.cpp Normal file
View File

@ -0,0 +1,233 @@
/**********************/
/* Class SCH_POLYLINE */
/**********************/
#include "fctsys.h"
#include "gr_basic.h"
#include "macros.h"
#include "class_drawpanel.h"
#include "trigo.h"
#include "common.h"
#include "richio.h"
#include "general.h"
#include "protos.h"
#include "sch_polyline.h"
SCH_POLYLINE::SCH_POLYLINE( int layer ) :
SCH_ITEM( NULL, SCH_POLYLINE_T )
{
m_Width = 0;
switch( layer )
{
default:
m_Layer = LAYER_NOTES;
break;
case LAYER_WIRE:
case LAYER_NOTES:
case LAYER_BUS:
m_Layer = layer;
break;
}
}
SCH_POLYLINE::SCH_POLYLINE( const SCH_POLYLINE& aPolyLine ) :
SCH_ITEM( aPolyLine )
{
m_Width = aPolyLine.m_Width;
m_PolyPoints = aPolyLine.m_PolyPoints;
}
SCH_POLYLINE::~SCH_POLYLINE()
{
}
EDA_ITEM* SCH_POLYLINE::doClone() const
{
return new SCH_POLYLINE( *this );
}
bool SCH_POLYLINE::Save( FILE* aFile ) const
{
bool success = true;
const char* layer = "Notes";
const char* width = "Line";
if( GetLayer() == LAYER_WIRE )
layer = "Wire";
if( GetLayer() == LAYER_BUS )
layer = "Bus";
if( fprintf( aFile, "Poly %s %s %d\n", width, layer, GetCornerCount() ) == EOF )
{
return false;
}
for( unsigned ii = 0; ii < GetCornerCount(); ii++ )
{
if( fprintf( aFile, "\t%-4d %-4d\n", m_PolyPoints[ii ].x, m_PolyPoints[ii].y ) == EOF )
{
success = false;
break;
}
}
return success;
}
bool SCH_POLYLINE::Load( LINE_READER& aLine, wxString& aErrorMsg )
{
char Name1[256];
char Name2[256];
wxPoint pt;
int ii;
char* line = (char*) aLine;
while( (*line != ' ' ) && *line )
line++;
if( sscanf( line, "%s %s %d", Name1, Name2, &ii ) != 3 )
{
aErrorMsg.Printf( wxT( "EESchema file polyline struct error at line %d, aborted" ),
aLine.LineNumber() );
aErrorMsg << wxT( "\n" ) << CONV_FROM_UTF8( (char*) aLine );
return false;
}
m_Layer = LAYER_NOTES;
if( Name2[0] == 'W' )
m_Layer = LAYER_WIRE;
if( Name2[0] == 'B' )
m_Layer = LAYER_BUS;
for( unsigned jj = 0; jj < (unsigned)ii; jj++ )
{
wxPoint point;
if( !aLine.ReadLine() || sscanf( ((char*) aLine), "%d %d", &pt.x, &pt.y ) != 2 )
{
aErrorMsg.Printf( wxT( "EESchema file polyline struct error at line %d, aborted" ),
aLine.LineNumber() );
aErrorMsg << wxT( "\n" ) << CONV_FROM_UTF8( (char*) aLine );
return false;
}
AddPoint( pt );
}
return true;
}
int SCH_POLYLINE::GetPenSize() const
{
int pensize = ( m_Width == 0 ) ? g_DrawDefaultLineThickness : m_Width;
return pensize;
}
void SCH_POLYLINE::Draw( WinEDA_DrawPanel* aPanel, wxDC* aDC, const wxPoint& aOffset,
int aDrawMode, int aColor )
{
int color;
int width = GetPenSize();
if( aColor >= 0 )
color = aColor;
else
color = ReturnLayerColor( m_Layer );
GRSetDrawMode( aDC, aDrawMode );
if( m_Layer == LAYER_BUS )
{
width *= 3;
}
GRMoveTo( m_PolyPoints[0].x, m_PolyPoints[0].y );
if( m_Layer == LAYER_NOTES )
{
for( unsigned i = 1; i < GetCornerCount(); i++ )
GRDashedLineTo( &aPanel->m_ClipBox, aDC, m_PolyPoints[i].x + aOffset.x,
m_PolyPoints[i].y + aOffset.y, width, color );
}
else
{
for( unsigned i = 1; i < GetCornerCount(); i++ )
GRLineTo( &aPanel->m_ClipBox, aDC, m_PolyPoints[i].x + aOffset.x,
m_PolyPoints[i].y + aOffset.y, width, color );
}
}
void SCH_POLYLINE::Mirror_X( int aXaxis_position )
{
for( unsigned ii = 0; ii < GetCornerCount(); ii++ )
{
m_PolyPoints[ii].y -= aXaxis_position;
NEGATE( m_PolyPoints[ii].y );
m_PolyPoints[ii].y = aXaxis_position;
}
}
void SCH_POLYLINE::Mirror_Y( int aYaxis_position )
{
for( unsigned ii = 0; ii < GetCornerCount(); ii++ )
{
m_PolyPoints[ii].x -= aYaxis_position;
NEGATE( m_PolyPoints[ii].x );
m_PolyPoints[ii].x = aYaxis_position;
}
}
void SCH_POLYLINE::Rotate( wxPoint rotationPoint )
{
for( unsigned ii = 0; ii < GetCornerCount(); ii++ )
{
RotatePoint( &m_PolyPoints[ii], rotationPoint, 900 );
}
}
bool SCH_POLYLINE::doHitTest( const wxPoint& aPoint, int aAccuracy, SCH_FILTER_T aFilter ) const
{
if( !( aFilter & ( DRAW_ITEM_T | WIRE_T | BUS_T ) ) )
return false;
for( size_t i = 0; i < m_PolyPoints.size() - 1; i++ )
{
if( TestSegmentHit( aPoint, m_PolyPoints[i], m_PolyPoints[i + 1], aAccuracy ) )
return true;
}
return false;
}
bool SCH_POLYLINE::doHitTest( const EDA_Rect& aRect, bool aContained, int aAccuracy ) const
{
EDA_Rect rect = aRect;
rect.Inflate( aAccuracy );
if( aContained )
return rect.Contains( GetBoundingBox() );
return rect.Intersects( GetBoundingBox() );
}

104
eeschema/sch_polyline.h Normal file
View File

@ -0,0 +1,104 @@
/**
* @file sch_polyline.h
*
*/
#ifndef _SCH_POLYLINE_H_
#define _SCH_POLYLINE_H_
#include "sch_item_struct.h"
class SCH_POLYLINE : public SCH_ITEM
{
public:
int m_Width; /* Thickness */
std::vector<wxPoint> m_PolyPoints; // list of points (>= 2)
public:
SCH_POLYLINE( int layer = LAYER_NOTES );
SCH_POLYLINE( const SCH_POLYLINE& aPolyLine );
~SCH_POLYLINE();
virtual wxString GetClass() const
{
return wxT( "SCH_POLYLINE" );
}
virtual void Draw( WinEDA_DrawPanel* aPanel, wxDC* aDC, const wxPoint& aOffset,
int aDrawMode, int aColor = -1 );
/**
* Function Save
* writes the data structures for this object out to a FILE in "*.sch"
* format.
* @param aFile The FILE to write to.
* @return bool - true if success writing else false.
*/
bool Save( FILE* aFile ) const;
/**
* Load schematic poly line entry from \a aLine in a .sch file.
*
* @param aLine - Essentially this is file to read schematic poly line from.
* @param aErrorMsg - Description of the error if an error occurs while loading the
* schematic poly line.
* @return True if the schematic poly line loaded successfully.
*/
virtual bool Load( LINE_READER& aLine, wxString& aErrorMsg );
/**
* Function AddPoint
* add a corner to m_PolyPoints
*/
void AddPoint( const wxPoint& point )
{
m_PolyPoints.push_back( point );
}
/**
* Function GetCornerCount
* @return the number of corners
*/
unsigned GetCornerCount() const { return m_PolyPoints.size(); }
/**
* Function GetPenSize
* @return the size of the "pen" that be used to draw or plot this item
*/
virtual int GetPenSize() const;
/**
* Function Move
* moves an item to a new position by \a aMoveVector.
* @param aMoveVector = the displacement vector
*/
virtual void Move( const wxPoint& aMoveVector )
{
for( unsigned ii = 0; ii < GetCornerCount(); ii++ )
m_PolyPoints[ii] += aMoveVector;
}
/**
* Function Mirror_Y
* mirrors an item relative to \a aYaxis_position.
* @param aYaxis_position The y axis position to mirror around.
*/
virtual void Mirror_Y( int aYaxis_position );
virtual void Mirror_X( int aXaxis_position );
virtual void Rotate( wxPoint rotationPoint );
private:
virtual bool doHitTest( const wxPoint& aPoint, int aAccuracy, SCH_FILTER_T aFilter ) const;
virtual bool doHitTest( const EDA_Rect& aRect, bool aContained, int aAccuracy ) const;
virtual EDA_ITEM* doClone() const;
};
#endif // _SCH_POLYLINE_H_

View File

@ -14,6 +14,7 @@
#include "protos.h" #include "protos.h"
#include "class_library.h" #include "class_library.h"
#include "sch_items.h" #include "sch_items.h"
#include "sch_line.h"
#include "sch_sheet.h" #include "sch_sheet.h"
#include "sch_component.h" #include "sch_component.h"
@ -203,11 +204,7 @@ SCH_ITEM* SCH_SCREEN::ExtractWires( bool CreateCopy )
if( CreateCopy ) if( CreateCopy )
{ {
if( item->Type() == SCH_JUNCTION_T ) new_item = item->Clone();
new_item = ( (SCH_JUNCTION*) item )->GenCopy();
else
new_item = ( (SCH_LINE*) item )->GenCopy();
new_item->SetNext( GetDrawItems() ); new_item->SetNext( GetDrawItems() );
SetDrawItems( new_item ); SetDrawItems( new_item );
} }

View File

@ -41,6 +41,26 @@ SCH_SHEET::SCH_SHEET( const wxPoint& pos ) : SCH_ITEM( NULL, SCH_SHEET_T )
} }
SCH_SHEET::SCH_SHEET( const SCH_SHEET& aSheet ) :
SCH_ITEM( aSheet )
{
m_Pos = aSheet.m_Pos;
m_TimeStamp = aSheet.m_TimeStamp;
m_SheetNameSize = aSheet.m_SheetNameSize;
m_FileNameSize = aSheet.m_FileNameSize;
m_AssociatedScreen = aSheet.m_AssociatedScreen;
m_SheetName = aSheet.m_SheetName;
m_FileName = aSheet.m_FileName;
m_labels = aSheet.m_labels;
for( size_t i = 0; i < m_labels.size(); i++ )
m_labels[i].SetParent( this );
if( m_AssociatedScreen )
m_AssociatedScreen->m_RefCount++;
}
SCH_SHEET::~SCH_SHEET() SCH_SHEET::~SCH_SHEET()
{ {
// also, look at the associated sheet & its reference count // also, look at the associated sheet & its reference count
@ -55,12 +75,12 @@ SCH_SHEET::~SCH_SHEET()
} }
/** EDA_ITEM* SCH_SHEET::doClone() const
* Function Save {
* writes the data structures for this object out to a FILE in "*.brd" format. return new SCH_SHEET( *this );
* @param aFile The FILE to write to. }
* @return bool - true if success writing else false.
*/
bool SCH_SHEET::Save( FILE* aFile ) const bool SCH_SHEET::Save( FILE* aFile ) const
{ {
if( fprintf( aFile, "$Sheet\n" ) == EOF if( fprintf( aFile, "$Sheet\n" ) == EOF
@ -248,49 +268,6 @@ bool SCH_SHEET::Load( LINE_READER& aLine, wxString& aErrorMsg )
} }
/* creates a copy of a sheet
* The linked data itself (GetDrawItems()) is not duplicated
*/
SCH_SHEET* SCH_SHEET::GenCopy()
{
SCH_SHEET* newitem = new SCH_SHEET( m_Pos );
newitem->m_Size = m_Size;
newitem->SetParent( m_Parent );
newitem->m_TimeStamp = GetTimeStamp();
newitem->m_FileName = m_FileName;
newitem->m_FileNameSize = m_FileNameSize;
/* newitem->m_SheetName = m_SheetName; m_SheetName must be unique for
* all sub sheets in a given sheet
* so we no not duplicate sheet
* name
*/
newitem->m_SheetNameSize = m_SheetNameSize;
BOOST_FOREACH( SCH_SHEET_PIN& sheetPin, m_labels )
{
SCH_SHEET_PIN* newSheetPin = sheetPin.GenCopy();
newSheetPin->SetParent( newitem );
newitem->GetSheetPins().push_back( newSheetPin );
}
newitem->renumberLabels();
/* don't copy screen data - just reference it. */
newitem->m_AssociatedScreen = m_AssociatedScreen;
if( m_AssociatedScreen )
m_AssociatedScreen->m_RefCount++;
return newitem;
}
/* Used if undo / redo command:
* swap data between this and copyitem
*/
void SCH_SHEET::SwapData( SCH_SHEET* copyitem ) void SCH_SHEET::SwapData( SCH_SHEET* copyitem )
{ {
EXCHG( m_Pos, copyitem->m_Pos ); EXCHG( m_Pos, copyitem->m_Pos );
@ -487,20 +464,12 @@ SCH_SHEET_PIN* SCH_SHEET::GetLabel( const wxPoint& aPosition )
} }
/**
* Function GetPenSize
* @return the size of the "pen" that be used to draw or plot this item
*/
int SCH_SHEET::GetPenSize() const int SCH_SHEET::GetPenSize() const
{ {
return g_DrawDefaultLineThickness; return g_DrawDefaultLineThickness;
} }
/**
* Function GetSheetNamePosition
* @return the position of the anchor of sheet name text
*/
wxPoint SCH_SHEET::GetSheetNamePosition() wxPoint SCH_SHEET::GetSheetNamePosition()
{ {
wxPoint pos = m_Pos; wxPoint pos = m_Pos;
@ -517,10 +486,7 @@ wxPoint SCH_SHEET::GetSheetNamePosition()
return pos; return pos;
} }
/**
* Function GetFileNamePosition
* @return the position of the anchor of filename text
*/
wxPoint SCH_SHEET::GetFileNamePosition() wxPoint SCH_SHEET::GetFileNamePosition()
{ {
wxPoint pos = m_Pos; wxPoint pos = m_Pos;
@ -538,16 +504,6 @@ wxPoint SCH_SHEET::GetFileNamePosition()
} }
/**
* Function Draw
* Draw the hierarchical sheet shape
* @param aPanel = the current DrawPanel
* @param aDc = the current Device Context
* @param aOffset = draw offset (usually wxPoint(0,0))
* @param aDrawMode = draw mode
* @param aColor = color used to draw sheet. Usually -1 to use the normal
* color for sheet items
*/
void SCH_SHEET::Draw( WinEDA_DrawPanel* aPanel, wxDC* aDC, void SCH_SHEET::Draw( WinEDA_DrawPanel* aPanel, wxDC* aDC,
const wxPoint& aOffset, int aDrawMode, int aColor ) const wxPoint& aOffset, int aDrawMode, int aColor )
{ {
@ -613,10 +569,6 @@ void SCH_SHEET::Draw( WinEDA_DrawPanel* aPanel, wxDC* aDC,
} }
/**
* Function GetBoundingBox
* @return an EDA_Rect giving the bounding box of the sheet
*/
EDA_Rect SCH_SHEET::GetBoundingBox() const EDA_Rect SCH_SHEET::GetBoundingBox() const
{ {
int dx, dy; int dx, dy;
@ -637,11 +589,6 @@ EDA_Rect SCH_SHEET::GetBoundingBox() const
} }
/**
* Function ComponentCount
* count our own components, without the power components.
* @return the component count.
*/
int SCH_SHEET::ComponentCount() int SCH_SHEET::ComponentCount()
{ {
int n = 0; int n = 0;
@ -672,13 +619,6 @@ int SCH_SHEET::ComponentCount()
} }
/**
* Function SearchHierarchy
* search the existing hierarchy for an instance of screen "FileName".
* @param aFilename = the filename to find
* @param aFilename = a location to return a pointer to the screen (if found)
* @return bool if found, and a pointer to the screen
*/
bool SCH_SHEET::SearchHierarchy( wxString aFilename, SCH_SCREEN** aScreen ) bool SCH_SHEET::SearchHierarchy( wxString aFilename, SCH_SCREEN** aScreen )
{ {
if( m_AssociatedScreen ) if( m_AssociatedScreen )
@ -708,17 +648,6 @@ bool SCH_SHEET::SearchHierarchy( wxString aFilename, SCH_SCREEN** aScreen )
} }
/**
* Function LocatePathOfScreen
* search the existing hierarchy for an instance of screen "FileName".
* don't bother looking at the root sheet - it must be unique,
* no other references to its m_AssociatedScreen otherwise there would be
* loops
* in the hierarchy.
* @param aScreen = the SCH_SCREEN* screen that we search for
* @param aList = the SCH_SHEET_PATH* that must be used
* @return true if found
*/
bool 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_AssociatedScreen )
@ -749,15 +678,6 @@ bool SCH_SHEET::LocatePathOfScreen( SCH_SCREEN* aScreen, SCH_SHEET_PATH* aList )
} }
/**
* Function Load.
* for the sheet: load the file m_FileName
* if a screen already exists, the file is already read.
* m_AssociatedScreen point on the screen, and its m_RefCount is incremented
* else creates a new associated screen and load the data file.
* @param aFrame = a SCH_EDIT_FRAME pointer to the maim schematic frame
* @return true if OK
*/
bool SCH_SHEET::Load( SCH_EDIT_FRAME* aFrame ) bool SCH_SHEET::Load( SCH_EDIT_FRAME* aFrame )
{ {
bool success = true; bool success = true;
@ -804,12 +724,6 @@ bool SCH_SHEET::Load( SCH_EDIT_FRAME* aFrame )
} }
/**
* Function CountSheets
* calculates the number of sheets found in "this"
* this number includes the full subsheets count
* @return the full count of sheets+subsheets contained by "this"
*/
int SCH_SHEET::CountSheets() int SCH_SHEET::CountSheets()
{ {
int count = 1; //1 = this!! int count = 1; //1 = this!!
@ -837,17 +751,6 @@ wxString SCH_SHEET::GetFileName( void )
} }
/**
* Function ChangeFileName
* Set a new filename and manage data and associated screen
* The main difficulty is the filename change in a complex hierarchy.
* - if new filename is not already used: change to the new name (and if an
* existing file is found, load it on request)
* - if new filename is already used (a complex hierarchy) : reference the
* sheet.
* @param aFileName = the new filename
* @param aFrame = the schematic frame
*/
bool SCH_SHEET::ChangeFileName( SCH_EDIT_FRAME* aFrame, const wxString& aFileName ) bool SCH_SHEET::ChangeFileName( SCH_EDIT_FRAME* aFrame, const wxString& aFileName )
{ {
if( ( GetFileName() == aFileName ) && m_AssociatedScreen ) if( ( GetFileName() == aFileName ) && m_AssociatedScreen )
@ -997,11 +900,6 @@ void SCH_SHEET::Mirror_X( int aXaxis_position )
} }
/**
* Function Mirror_Y (virtual)
* mirror item relative to an Y axis
* @param aYaxis_position = the y axis 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;
@ -1031,14 +929,7 @@ void SCH_SHEET::Resize( const wxSize& aSize )
} }
/** Compare schematic sheet entry (filename and sheetname) against search string. bool SCH_SHEET::Matches( wxFindReplaceData& aSearchData, void* aAuxData, wxPoint* aFindLocation )
* @param aSearchData - Criteria to search against.
* @param aAuxData - a pointer on auxiliary data, not used here.
* @param aFindLocation - a wxPoint where to put the location of matched item. can be NULL.
* @return True if this item matches the search criteria.
*/
bool SCH_SHEET::Matches( wxFindReplaceData& aSearchData,
void* aAuxData, wxPoint * aFindLocation )
{ {
if( SCH_ITEM::Matches( m_FileName, aSearchData ) ) if( SCH_ITEM::Matches( m_FileName, aSearchData ) )
{ {
@ -1136,7 +1027,7 @@ void SCH_SHEET::GetConnectionPoints( vector< wxPoint >& aPoints ) const
} }
bool SCH_SHEET::DoHitTest( const wxPoint& aPoint, int aAccuracy, SCH_FILTER_T aFilter ) const bool SCH_SHEET::doHitTest( const wxPoint& aPoint, int aAccuracy, SCH_FILTER_T aFilter ) const
{ {
if( !( aFilter & SHEET_T ) ) if( !( aFilter & SHEET_T ) )
return false; return false;
@ -1145,18 +1036,18 @@ bool SCH_SHEET::DoHitTest( const wxPoint& aPoint, int aAccuracy, SCH_FILTER_T aF
rect.Inflate( aAccuracy ); rect.Inflate( aAccuracy );
return rect.Inside( aPoint ); return rect.Contains( aPoint );
} }
bool SCH_SHEET::DoHitTest( const EDA_Rect& aRect, bool aContained, int aAccuracy ) const bool SCH_SHEET::doHitTest( const EDA_Rect& aRect, bool aContained, int aAccuracy ) const
{ {
EDA_Rect rect = aRect; EDA_Rect rect = aRect;
rect.Inflate( aAccuracy ); rect.Inflate( aAccuracy );
if( aContained ) if( aContained )
return rect.Inside( GetBoundingBox() ); return rect.Contains( GetBoundingBox() );
return rect.Intersects( GetBoundingBox() ); return rect.Intersects( GetBoundingBox() );
} }
@ -1182,4 +1073,3 @@ void SCH_SHEET::Show( int nestLevel, std::ostream& os )
} }
#endif #endif

View File

@ -47,11 +47,15 @@ private:
* orientation. * orientation.
*/ */
virtual EDA_ITEM* doClone() const;
public: public:
SCH_SHEET_PIN( SCH_SHEET* parent, SCH_SHEET_PIN( SCH_SHEET* parent,
const wxPoint& pos = wxPoint( 0, 0 ), const wxPoint& pos = wxPoint( 0, 0 ),
const wxString& text = wxEmptyString ); const wxString& text = wxEmptyString );
SCH_SHEET_PIN( const SCH_SHEET_PIN& aSheetLabel );
~SCH_SHEET_PIN() { } ~SCH_SHEET_PIN() { }
virtual wxString GetClass() const virtual wxString GetClass() const
@ -59,11 +63,8 @@ public:
return wxT( "SCH_SHEET_PIN" ); return wxT( "SCH_SHEET_PIN" );
} }
bool operator ==( const SCH_SHEET_PIN* aPin ) const; bool operator ==( const SCH_SHEET_PIN* aPin ) const;
SCH_SHEET_PIN* GenCopy();
virtual void Draw( WinEDA_DrawPanel* aPanel, virtual void Draw( WinEDA_DrawPanel* aPanel,
wxDC* aDC, wxDC* aDC,
const wxPoint& aOffset, const wxPoint& aOffset,
@ -101,6 +102,12 @@ public:
void SetNumber( int aNumber ); void SetNumber( int aNumber );
void SetEdge( int aEdge ); void SetEdge( int aEdge );
int GetEdge(); int GetEdge();
/**
* Function ConstraintOnEdge
* is used to adjust label position to egde based on proximity to vertical / horizontal edge
* of the parent sheet.
*/
void ConstraintOnEdge( wxPoint Pos ); void ConstraintOnEdge( wxPoint Pos );
/** /**
@ -223,6 +230,9 @@ public:
public: public:
SCH_SHEET( const wxPoint& pos = wxPoint( 0, 0 ) ); SCH_SHEET( const wxPoint& pos = wxPoint( 0, 0 ) );
SCH_SHEET( const SCH_SHEET& aSheet );
~SCH_SHEET(); ~SCH_SHEET();
virtual wxString GetClass() const virtual wxString GetClass() const
@ -250,8 +260,6 @@ public:
void Place( SCH_EDIT_FRAME* frame, wxDC* DC ); void Place( SCH_EDIT_FRAME* frame, wxDC* DC );
SCH_SHEET* GenCopy();
void DisplayInfo( WinEDA_DrawFrame* frame ); void DisplayInfo( WinEDA_DrawFrame* frame );
/* there is no member for orientation in sch_sheet, to preserve file /* there is no member for orientation in sch_sheet, to preserve file
@ -513,8 +521,9 @@ protected:
void renumberLabels(); void renumberLabels();
private: private:
virtual bool DoHitTest( const wxPoint& aPoint, int aAccuracy, SCH_FILTER_T aFilter ) const; virtual bool doHitTest( const wxPoint& aPoint, int aAccuracy, SCH_FILTER_T aFilter ) 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;
}; };
#endif /* CLASS_DRAWSHEET_H */ #endif /* CLASS_DRAWSHEET_H */

View File

@ -52,22 +52,20 @@ SCH_SHEET_PIN::SCH_SHEET_PIN( SCH_SHEET* parent, const wxPoint& pos, const wxStr
} }
SCH_SHEET_PIN* SCH_SHEET_PIN::GenCopy() SCH_SHEET_PIN::SCH_SHEET_PIN( const SCH_SHEET_PIN& aSheetLabel ) :
SCH_HIERLABEL( aSheetLabel )
{ {
SCH_SHEET_PIN* newitem = new SCH_SHEET_PIN( (SCH_SHEET*) m_Parent, m_Pos, m_Text ); m_Number = aSheetLabel.m_Number;
m_Edge = aSheetLabel.m_Edge;
newitem->SetEdge( GetEdge() );
newitem->m_Shape = m_Shape;
newitem->m_Size = m_Size;
newitem->SetNumber( GetNumber() );
return newitem;
} }
/** SCH_SHEET_PIN::Draw is the same as SCH_HIERLABEL::Draw
* but the graphic icon is slightly different EDA_ITEM* SCH_SHEET_PIN::doClone() const
* for INPUT type the icon is the OUTPUT shape of SCH_HIERLABEL {
* for OUTPUT type the icon is the INPUT shape of SCH_HIERLABEL return new SCH_SHEET_PIN( *this );
*/ }
void SCH_SHEET_PIN::Draw( WinEDA_DrawPanel* aPanel, void SCH_SHEET_PIN::Draw( WinEDA_DrawPanel* aPanel,
wxDC* aDC, wxDC* aDC,
const wxPoint& aOffset, const wxPoint& aOffset,
@ -76,7 +74,7 @@ void SCH_SHEET_PIN::Draw( WinEDA_DrawPanel* aPanel,
{ {
// The icon selection is handle by the virtual method CreateGraphicShape // The icon selection is handle by the virtual method CreateGraphicShape
// called by ::Draw // called by ::Draw
SCH_HIERLABEL::Draw(aPanel, aDC, aOffset, aDraw_mode, aColor ); SCH_HIERLABEL::Draw( aPanel, aDC, aOffset, aDraw_mode, aColor );
} }
@ -99,10 +97,6 @@ bool SCH_SHEET_PIN::operator==( const SCH_SHEET_PIN* aPin ) const
} }
/**
* Function GetPenSize
* @return the size of the "pen" that be used to draw or plot this item
*/
int SCH_SHEET_PIN::GetPenSize() const int SCH_SHEET_PIN::GetPenSize() const
{ {
return g_DrawDefaultLineThickness; return g_DrawDefaultLineThickness;
@ -124,6 +118,7 @@ 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*/
@ -155,10 +150,6 @@ int SCH_SHEET_PIN::GetEdge()
} }
/* ConstraintOnEdge is used to ajust label position to egde based
* on proximity to vertical / horizontal edge.
* used by sheetlab and resize
*/
void SCH_SHEET_PIN::ConstraintOnEdge( wxPoint Pos ) void SCH_SHEET_PIN::ConstraintOnEdge( wxPoint Pos )
{ {
SCH_SHEET* Sheet = (SCH_SHEET*) GetParent(); SCH_SHEET* Sheet = (SCH_SHEET*) GetParent();
@ -195,26 +186,23 @@ void SCH_SHEET_PIN::ConstraintOnEdge( 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;
} }
} }
/**
* 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_SHEET_PIN::Save( FILE* aFile ) const bool SCH_SHEET_PIN::Save( FILE* aFile ) const
{ {
int type = 'U', side = 'L'; int type = 'U', side = 'L';
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
@ -331,14 +319,6 @@ bool SCH_SHEET_PIN::Load( LINE_READER& aLine, wxString& aErrorMsg )
} }
/**
* Function Matches
* Compare hierarchical pin name against search string.
* @param aSearchData - Criteria to search against.
* @param aAuxData - a pointer on auxiliary data, not used here
* @param aFindLocation - a wxPoint where to put the location of matched item. can be NULL.
* @return True if this item matches the search criteria.
*/
bool SCH_SHEET_PIN::Matches( wxFindReplaceData& aSearchData, bool SCH_SHEET_PIN::Matches( wxFindReplaceData& aSearchData,
void* aAuxData, wxPoint * aFindLocation ) void* aAuxData, wxPoint * aFindLocation )
{ {
@ -346,6 +326,7 @@ bool SCH_SHEET_PIN::Matches( wxFindReplaceData& aSearchData,
{ {
if( aFindLocation ) if( aFindLocation )
*aFindLocation = m_Pos; *aFindLocation = m_Pos;
return true; return true;
} }
@ -358,6 +339,7 @@ void SCH_SHEET_PIN::Mirror_X( int aXaxis_position )
int p = m_Pos.y - aXaxis_position; int p = m_Pos.y - aXaxis_position;
m_Pos.y = aXaxis_position - p; m_Pos.y = aXaxis_position - p;
switch( m_Edge ) switch( m_Edge )
{ {
case 2: case 2:
@ -376,6 +358,7 @@ void SCH_SHEET_PIN::Mirror_Y( int aYaxis_position )
int p = m_Pos.x - aYaxis_position; int p = m_Pos.x - aYaxis_position;
m_Pos.x = aYaxis_position - p; m_Pos.x = aYaxis_position - p;
switch( m_Edge ) switch( m_Edge )
{ {
case 0: case 0:
@ -392,6 +375,7 @@ void SCH_SHEET_PIN::Mirror_Y( int aYaxis_position )
void SCH_SHEET_PIN::Rotate( wxPoint rotationPoint ) 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
@ -451,6 +435,7 @@ void SCH_SHEET_PIN::GetEndPoints( std::vector <DANGLING_END_ITEM>& aItemList )
#if defined(DEBUG) #if defined(DEBUG)
void SCH_SHEET_PIN::Show( int nestLevel, std::ostream& os ) void SCH_SHEET_PIN::Show( int nestLevel, std::ostream& os )
{ {
// XML output: // XML output:
@ -463,5 +448,4 @@ void SCH_SHEET_PIN::Show( int nestLevel, std::ostream& os )
// NestedSpace( nestLevel, os ) << "</" << s.Lower().mb_str() << ">\n"; // NestedSpace( nestLevel, os ) << "</" << s.Lower().mb_str() << ">\n";
} }
#endif #endif

View File

@ -76,7 +76,8 @@ static int* TemplateShape[5][4] =
SCH_TEXT::SCH_TEXT( const wxPoint& pos, const wxString& text, KICAD_T aType ) : SCH_TEXT::SCH_TEXT( const wxPoint& pos, const wxString& text, KICAD_T aType ) :
SCH_ITEM( NULL, aType ), EDA_TextStruct( text ) SCH_ITEM( NULL, aType ),
EDA_TextStruct( text )
{ {
m_Layer = LAYER_NOTES; m_Layer = LAYER_NOTES;
m_Pos = pos; m_Pos = pos;
@ -87,53 +88,30 @@ SCH_TEXT::SCH_TEXT( const wxPoint& pos, const wxString& text, KICAD_T aType ) :
} }
SCH_TEXT* SCH_TEXT::GenCopy() SCH_TEXT::SCH_TEXT( const SCH_TEXT& aText ) :
SCH_ITEM( aText ),
EDA_TextStruct( aText )
{ {
SCH_TEXT* newitem; m_Pos = aText.m_Pos;
m_Shape = aText.m_Shape;
switch( Type() ) m_MultilineAllowed = aText.m_MultilineAllowed;
{ m_SchematicOrientation = aText.m_SchematicOrientation;
default: m_IsDangling = false;
case SCH_TEXT_T: }
newitem = new SCH_TEXT( m_Pos, m_Text );
break;
EDA_ITEM* SCH_TEXT::doClone() const
case SCH_GLOBAL_LABEL_T: {
newitem = new SCH_GLOBALLABEL( m_Pos, m_Text ); return new SCH_TEXT( *this );
break; }
case SCH_HIERARCHICAL_LABEL_T:
newitem = new SCH_HIERLABEL( m_Pos, m_Text ); void SCH_TEXT::IncrementLabel()
break; {
IncrementLabelMember( m_Text );
case SCH_LABEL_T:
newitem = new SCH_LABEL( m_Pos, m_Text );
break;
}
newitem->m_Layer = m_Layer;
newitem->m_Shape = m_Shape;
newitem->m_Orient = m_Orient;
newitem->m_Size = m_Size;
newitem->m_Thickness = m_Thickness;
newitem->m_HJustify = m_HJustify;
newitem->m_VJustify = m_VJustify;
newitem->m_IsDangling = m_IsDangling;
newitem->m_Italic = m_Italic;
newitem->m_Bold = m_Bold;
newitem->m_SchematicOrientation = m_SchematicOrientation;
return newitem;
} }
/**
* Function GetSchematicTextOffset (virtual)
* @return the offset between the SCH_TEXT position and the text itself
* position
* This offset depend on orientation, and the type of text
* (room to draw an associated graphic symbol, or put the text above a wire)
*/
wxPoint SCH_TEXT::GetSchematicTextOffset() wxPoint SCH_TEXT::GetSchematicTextOffset()
{ {
wxPoint text_offset; wxPoint text_offset;
@ -178,11 +156,6 @@ bool SCH_TEXT::Matches( wxFindReplaceData& aSearchData, void* aAuxData, wxPoint
} }
/**
* Function Mirror_Y (virtual)
* mirror item relative to an Y axis
* @param aYaxis_position = the y axis position
*/
void SCH_TEXT::Mirror_Y( int aYaxis_position ) void SCH_TEXT::Mirror_Y( int aYaxis_position )
{ {
// Text is NOT really mirrored; it is moved to a suitable position // Text is NOT really mirrored; it is moved to a suitable position
@ -224,11 +197,6 @@ void SCH_TEXT::Mirror_Y( int aYaxis_position )
} }
/**
* Function Mirror_X (virtual)
* mirror item relative to an X axis
* @param aXaxis_position = the x axis position
*/
void SCH_TEXT::Mirror_X( int aXaxis_position ) void SCH_TEXT::Mirror_X( int aXaxis_position )
{ {
// Text is NOT really mirrored; it is moved to a suitable position // Text is NOT really mirrored; it is moved to a suitable position
@ -303,19 +271,6 @@ void SCH_TEXT::Rotate( wxPoint rotationPoint )
} }
/**
* Function SetTextOrientAndJustifyParmeters (virtual)
* Set m_SchematicOrientation, and initialize
* m_orient,m_HJustified and m_VJustified, according to the value of
* m_SchematicOrientation
* must be called after changing m_SchematicOrientation
* @param aSchematicOrientation =
* 0 = normal (horizontal, left justified).
* 1 = up (vertical)
* 2 = (horizontal, right justified). This can be seen as the mirrored
* position of 0
* 3 = bottom . This can be seen as the mirrored position of up
*/
void SCH_TEXT::SetSchematicTextOrientation( int aSchematicOrientation ) void SCH_TEXT::SetSchematicTextOrientation( int aSchematicOrientation )
{ {
m_SchematicOrientation = aSchematicOrientation; m_SchematicOrientation = aSchematicOrientation;
@ -388,10 +343,6 @@ void SCH_TEXT::Place( SCH_EDIT_FRAME* frame, wxDC* DC )
} }
/**
* Function GetPenSize
* @return the size of the "pen" that be used to draw or plot this item
*/
int SCH_TEXT::GetPenSize() const int SCH_TEXT::GetPenSize() const
{ {
int pensize = m_Thickness; int pensize = m_Thickness;
@ -410,9 +361,6 @@ int SCH_TEXT::GetPenSize() const
} }
/* Text type Comment (text on layer "NOTE") have 4 directions, and the Text
* origin is the first letter
*/
void SCH_TEXT::Draw( WinEDA_DrawPanel* panel, wxDC* DC, const wxPoint& aOffset, void SCH_TEXT::Draw( WinEDA_DrawPanel* panel, wxDC* DC, const wxPoint& aOffset,
int DrawMode, int Color ) int DrawMode, int Color )
{ {
@ -425,6 +373,7 @@ void SCH_TEXT::Draw( WinEDA_DrawPanel* panel, wxDC* DC, const wxPoint& aOffset,
color = (EDA_Colors) Color; color = (EDA_Colors) Color;
else else
color = ReturnLayerColor( m_Layer ); color = ReturnLayerColor( m_Layer );
GRSetDrawMode( DC, DrawMode ); GRSetDrawMode( DC, DrawMode );
wxPoint text_offset = aOffset + GetSchematicTextOffset(); wxPoint text_offset = aOffset + GetSchematicTextOffset();
@ -671,7 +620,7 @@ EDA_Rect SCH_TEXT::GetBoundingBox() const
} }
bool SCH_TEXT::DoHitTest( const wxPoint& aPoint, int aAccuracy, SCH_FILTER_T aFilter ) const bool SCH_TEXT::doHitTest( const wxPoint& aPoint, int aAccuracy, SCH_FILTER_T aFilter ) const
{ {
if( !( aFilter & TEXT_T ) ) if( !( aFilter & TEXT_T ) )
return false; return false;
@ -680,7 +629,7 @@ bool SCH_TEXT::DoHitTest( const wxPoint& aPoint, int aAccuracy, SCH_FILTER_T aFi
} }
bool SCH_TEXT::DoHitTest( const EDA_Rect& aRect, bool aContained, int aAccuracy ) const bool SCH_TEXT::doHitTest( const EDA_Rect& aRect, bool aContained, int aAccuracy ) const
{ {
return TextHitTest( aRect, aContained, aAccuracy ); return TextHitTest( aRect, aContained, aAccuracy );
} }
@ -702,42 +651,9 @@ void SCH_TEXT::Show( int nestLevel, std::ostream& os )
<< "</" << s.Lower().mb_str() << ">\n"; << "</" << s.Lower().mb_str() << ">\n";
} }
#endif #endif
/**
* Function GetSchematicTextOffset (virtual)
* @return the offset between the SCH_TEXT position and the text itself
* position
* This offset depend on orientation, and the type of text
* (room to draw an associated graphic symbol, or put the text above a wire)
*/
wxPoint SCH_LABEL::GetSchematicTextOffset()
{
return SCH_TEXT::GetSchematicTextOffset();
}
/**
* Function SetTextOrientAndJustifyParmeters
* Set m_SchematicOrientation, and initialize
* m_orient,m_HJustified and m_VJustified, according to the value of
* m_SchematicOrientation (for a label)
* must be called after changing m_SchematicOrientation
* @param aSchematicOrientation =
* 0 = normal (horizontal, left justified).
* 1 = up (vertical)
* 2 = (horizontal, right justified). This can be seen as the mirrored
* position of 0
* 3 = bottom . This can be seen as the mirrored position of up
*/
void SCH_LABEL::SetSchematicTextOrientation( int aSchematicOrientation )
{
SCH_TEXT::SetSchematicTextOrientation( aSchematicOrientation );
}
SCH_LABEL::SCH_LABEL( const wxPoint& pos, const wxString& text ) : SCH_LABEL::SCH_LABEL( const wxPoint& pos, const wxString& text ) :
SCH_TEXT( pos, text, SCH_LABEL_T ) SCH_TEXT( pos, text, SCH_LABEL_T )
{ {
@ -748,11 +664,30 @@ SCH_LABEL::SCH_LABEL( const wxPoint& pos, const wxString& text ) :
} }
/** SCH_LABEL::SCH_LABEL( const SCH_LABEL& aLabel ) :
* Function Mirror_X (virtual) SCH_TEXT( aLabel )
* mirror item relative to an X axis {
* @param aXaxis_position = the x axis position }
*/
EDA_ITEM* SCH_LABEL::doClone() const
{
return new SCH_LABEL( *this );
}
wxPoint SCH_LABEL::GetSchematicTextOffset()
{
return SCH_TEXT::GetSchematicTextOffset();
}
void SCH_LABEL::SetSchematicTextOrientation( int aSchematicOrientation )
{
SCH_TEXT::SetSchematicTextOrientation( aSchematicOrientation );
}
void SCH_LABEL::Mirror_X( int aXaxis_position ) void SCH_LABEL::Mirror_X( int aXaxis_position )
{ {
// Text is NOT really mirrored; it is moved to a suitable position // Text is NOT really mirrored; it is moved to a suitable position
@ -775,12 +710,6 @@ void SCH_LABEL::Rotate( wxPoint rotationPoint )
} }
/**
* 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_LABEL::Save( FILE* aFile ) const bool SCH_LABEL::Save( FILE* aFile ) const
{ {
bool success = true; bool success = true;
@ -862,10 +791,6 @@ bool SCH_LABEL::Load( LINE_READER& aLine, wxString& aErrorMsg )
} }
/**
* Function Draw
* a label is drawn like a text. So just call SCH_TEXT::Draw
*/
void SCH_LABEL::Draw( WinEDA_DrawPanel* panel, wxDC* DC, const wxPoint& offset, void SCH_LABEL::Draw( WinEDA_DrawPanel* panel, wxDC* DC, const wxPoint& offset,
int DrawMode, int Color ) int DrawMode, int Color )
{ {
@ -921,7 +846,7 @@ EDA_Rect SCH_LABEL::GetBoundingBox() const
} }
bool SCH_LABEL::DoHitTest( const wxPoint& aPoint, int aAccuracy, SCH_FILTER_T aFilter ) const bool SCH_LABEL::doHitTest( const wxPoint& aPoint, int aAccuracy, SCH_FILTER_T aFilter ) const
{ {
if( !( aFilter & LABEL_T ) ) if( !( aFilter & LABEL_T ) )
return false; return false;
@ -940,12 +865,18 @@ SCH_GLOBALLABEL::SCH_GLOBALLABEL( const wxPoint& pos, const wxString& text ) :
} }
/** SCH_GLOBALLABEL::SCH_GLOBALLABEL( const SCH_GLOBALLABEL& aGlobalLabel ) :
* Function Save SCH_TEXT( aGlobalLabel )
* 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.
*/
EDA_ITEM* SCH_GLOBALLABEL::doClone() const
{
return new SCH_GLOBALLABEL( *this );
}
bool SCH_GLOBALLABEL::Save( FILE* aFile ) const bool SCH_GLOBALLABEL::Save( FILE* aFile ) const
{ {
bool success = true; bool success = true;
@ -953,6 +884,7 @@ bool SCH_GLOBALLABEL::Save( FILE* aFile ) const
if( m_Italic ) if( m_Italic )
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, CONV_TO_UTF8( m_Text ) ) == EOF ) SheetLabelType[m_Shape], shape, m_Thickness, CONV_TO_UTF8( m_Text ) ) == EOF )
@ -1016,12 +948,16 @@ bool SCH_GLOBALLABEL::Load( LINE_READER& aLine, wxString& aErrorMsg )
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;
@ -1029,11 +965,6 @@ bool SCH_GLOBALLABEL::Load( LINE_READER& aLine, wxString& aErrorMsg )
} }
/**
* Function Mirror_Y (virtual)
* mirror item relative to an Y axis
* @param aYaxis_position = the y axis position
*/
void SCH_GLOBALLABEL::Mirror_Y( int aYaxis_position ) void SCH_GLOBALLABEL::Mirror_Y( int aYaxis_position )
{ {
/* The global label is NOT really mirrored. /* The global label is NOT really mirrored.
@ -1084,13 +1015,6 @@ void SCH_GLOBALLABEL::Rotate( wxPoint rotationPoint )
} }
/**
* Function GetSchematicTextOffset (virtual)
* @return the offset between the SCH_TEXT position and the text itself
* position
* This offset depend on orientation, and the type of text
* (room to draw an associated graphic symbol, or put the text above a wire)
*/
wxPoint SCH_GLOBALLABEL::GetSchematicTextOffset() wxPoint SCH_GLOBALLABEL::GetSchematicTextOffset()
{ {
wxPoint text_offset; wxPoint text_offset;
@ -1140,19 +1064,6 @@ wxPoint SCH_GLOBALLABEL::GetSchematicTextOffset()
} }
/**
* Function SetTextOrientAndJustifyParmeters
* Set m_SchematicOrientation, and initialize
* m_orient,m_HJustified and m_VJustified, according to the value of
* m_SchematicOrientation
* must be called after changing m_SchematicOrientation
* @param aSchematicOrientation =
* 0 = normal (horizontal, left justified).
* 1 = up (vertical)
* 2 = (horizontal, right justified). This can be seen as the mirrored
* position of 0
* 3 = bottom . This can be seen as the mirrored position of up
*/
void SCH_GLOBALLABEL::SetSchematicTextOrientation( int aSchematicOrientation ) void SCH_GLOBALLABEL::SetSchematicTextOrientation( int aSchematicOrientation )
{ {
m_SchematicOrientation = aSchematicOrientation; m_SchematicOrientation = aSchematicOrientation;
@ -1187,8 +1098,6 @@ void SCH_GLOBALLABEL::SetSchematicTextOrientation( int aSchematicOrientation )
} }
/* Texts type Global Label have 4 directions, and the Text origin is the graphic icon
*/
void SCH_GLOBALLABEL::Draw( WinEDA_DrawPanel* panel, void SCH_GLOBALLABEL::Draw( WinEDA_DrawPanel* panel,
wxDC* DC, wxDC* DC,
const wxPoint& aOffset, const wxPoint& aOffset,
@ -1199,7 +1108,6 @@ void SCH_GLOBALLABEL::Draw( WinEDA_DrawPanel* panel,
EDA_Colors color; EDA_Colors color;
wxPoint text_offset = aOffset + GetSchematicTextOffset(); wxPoint text_offset = aOffset + GetSchematicTextOffset();
if( Color >= 0 ) if( Color >= 0 )
color = (EDA_Colors) Color; color = (EDA_Colors) Color;
else else
@ -1229,12 +1137,6 @@ void SCH_GLOBALLABEL::Draw( WinEDA_DrawPanel* panel,
} }
/**
* Function CreateGraphicShape
* Calculates the graphic shape (a polygon) associated to the text
* @param aCorner_list = a buffer to fill with polygon corners coordinates
* @param Pos = Position of the shape
*/
void SCH_GLOBALLABEL::CreateGraphicShape( std::vector <wxPoint>& aCorner_list, void SCH_GLOBALLABEL::CreateGraphicShape( std::vector <wxPoint>& aCorner_list,
const wxPoint& Pos ) const wxPoint& Pos )
{ {
@ -1370,7 +1272,7 @@ EDA_Rect SCH_GLOBALLABEL::GetBoundingBox() const
} }
bool SCH_GLOBALLABEL::DoHitTest( const wxPoint& aPoint, int aAccuracy, SCH_FILTER_T aFilter ) const bool SCH_GLOBALLABEL::doHitTest( const wxPoint& aPoint, int aAccuracy, SCH_FILTER_T aFilter ) const
{ {
if( !( aFilter & LABEL_T ) ) if( !( aFilter & LABEL_T ) )
return false; return false;
@ -1389,12 +1291,18 @@ SCH_HIERLABEL::SCH_HIERLABEL( const wxPoint& pos, const wxString& text, KICAD_T
} }
/** SCH_HIERLABEL::SCH_HIERLABEL( const SCH_HIERLABEL& aHierLabel ) :
* Function Save SCH_TEXT( aHierLabel )
* 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.
*/
EDA_ITEM* SCH_HIERLABEL::doClone() const
{
return new SCH_HIERLABEL( *this );
}
bool SCH_HIERLABEL::Save( FILE* aFile ) const bool SCH_HIERLABEL::Save( FILE* aFile ) const
{ {
bool success = true; bool success = true;
@ -1402,6 +1310,7 @@ bool SCH_HIERLABEL::Save( FILE* aFile ) const
if( m_Italic ) if( m_Italic )
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, CONV_TO_UTF8( m_Text ) ) == EOF ) SheetLabelType[m_Shape], shape, m_Thickness, CONV_TO_UTF8( m_Text ) ) == EOF )
@ -1465,12 +1374,16 @@ bool SCH_HIERLABEL::Load( LINE_READER& aLine, wxString& aErrorMsg )
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;
@ -1478,19 +1391,6 @@ bool SCH_HIERLABEL::Load( LINE_READER& aLine, wxString& aErrorMsg )
} }
/**
* Function SetTextOrientAndJustifyParmeters
* Set m_SchematicOrientation, and initialize
* m_orient,m_HJustified and m_VJustified, according to the value of
* m_SchematicOrientation
* must be called after changing m_SchematicOrientation
* @param aSchematicOrientation =
* 0 = normal (horizontal, left justified).
* 1 = up (vertical)
* 2 = (horizontal, right justified). This can be seen as the mirrored
* position of 0
* 3 = bottom . This can be seen as the mirrored position of up
*/
void SCH_HIERLABEL::SetSchematicTextOrientation( int aSchematicOrientation ) void SCH_HIERLABEL::SetSchematicTextOrientation( int aSchematicOrientation )
{ {
m_SchematicOrientation = aSchematicOrientation; m_SchematicOrientation = aSchematicOrientation;
@ -1525,9 +1425,6 @@ void SCH_HIERLABEL::SetSchematicTextOrientation( int aSchematicOrientation )
} }
/* Hierarchical Label have a text and a graphic icon.
* Texts type have 4 directions, and the text origin is the graphic icon
*/
void SCH_HIERLABEL::Draw( WinEDA_DrawPanel* panel, void SCH_HIERLABEL::Draw( WinEDA_DrawPanel* panel,
wxDC* DC, wxDC* DC,
const wxPoint& offset, const wxPoint& offset,
@ -1568,12 +1465,6 @@ void SCH_HIERLABEL::Draw( WinEDA_DrawPanel* panel,
} }
/**
* Function CreateGraphicShape
* calculates the graphic shape (a polygon) associated to the text
* @param aCorner_list = a buffer to fill with polygon corners coordinates
* @param Pos = Postion of the shape
*/
void SCH_HIERLABEL::CreateGraphicShape( std::vector <wxPoint>& aCorner_list, void SCH_HIERLABEL::CreateGraphicShape( std::vector <wxPoint>& aCorner_list,
const wxPoint& Pos ) const wxPoint& Pos )
{ {
@ -1583,6 +1474,7 @@ void SCH_HIERLABEL::CreateGraphicShape( std::vector <wxPoint>& aCorner_list,
int imax = *Template; Template++; int imax = *Template; Template++;
aCorner_list.clear(); aCorner_list.clear();
for( int ii = 0; ii < imax; ii++ ) for( int ii = 0; ii < imax; ii++ )
{ {
wxPoint corner; wxPoint corner;
@ -1596,6 +1488,7 @@ void SCH_HIERLABEL::CreateGraphicShape( std::vector <wxPoint>& aCorner_list,
} }
} }
EDA_Rect SCH_HIERLABEL::GetBoundingBox() const EDA_Rect SCH_HIERLABEL::GetBoundingBox() const
{ {
int x, y, dx, dy, length, height; int x, y, dx, dy, length, height;
@ -1648,13 +1541,6 @@ EDA_Rect SCH_HIERLABEL::GetBoundingBox() const
} }
/**
* Function GetSchematicTextOffset (virtual)
* @return the offset between the SCH_TEXT position and the text itself
* position
* This offset depend on orientation, and the type of text
* (room to draw an associated graphic symbol, or put the text above a wire)
*/
wxPoint SCH_HIERLABEL::GetSchematicTextOffset() wxPoint SCH_HIERLABEL::GetSchematicTextOffset()
{ {
wxPoint text_offset; wxPoint text_offset;
@ -1686,17 +1572,11 @@ wxPoint SCH_HIERLABEL::GetSchematicTextOffset()
} }
/**
* Function Mirror_Y (virtual)
* mirror item relative to an Y axis
* @param aYaxis_position = the y axis position
*/
void SCH_HIERLABEL::Mirror_Y( int aYaxis_position ) void SCH_HIERLABEL::Mirror_Y( int aYaxis_position )
{ {
/* The hierarchical label is NOT really mirrored. /* The hierarchical label is NOT really mirrored for an horizontal label, the schematic
* for an horizontal label, the schematic orientation is changed. * orientation is changed. For a vericalal label, the schematic orientation is not changed
* for a vericalal label, the schematic orientation is not changed. * and the label is moved to a suitable position.
* and the label is moved to a suitable position
*/ */
switch( GetSchematicTextOrientation() ) switch( GetSchematicTextOrientation() )
@ -1742,7 +1622,7 @@ void SCH_HIERLABEL::Rotate( wxPoint rotationPoint )
} }
bool SCH_HIERLABEL::DoHitTest( const wxPoint& aPoint, int aAccuracy, SCH_FILTER_T aFilter ) const bool SCH_HIERLABEL::doHitTest( const wxPoint& aPoint, int aAccuracy, SCH_FILTER_T aFilter ) const
{ {
if( !( aFilter & LABEL_T ) ) if( !( aFilter & LABEL_T ) )
return false; return false;

View File

@ -56,6 +56,9 @@ public:
SCH_TEXT( const wxPoint& pos = wxPoint( 0, 0 ), SCH_TEXT( const wxPoint& pos = wxPoint( 0, 0 ),
const wxString& text = wxEmptyString, const wxString& text = wxEmptyString,
KICAD_T aType = SCH_TEXT_T ); KICAD_T aType = SCH_TEXT_T );
SCH_TEXT( const SCH_TEXT& aText );
~SCH_TEXT() { } ~SCH_TEXT() { }
virtual wxString GetClass() const virtual wxString GetClass() const
@ -63,6 +66,11 @@ public:
return wxT( "SCH_TEXT" ); return wxT( "SCH_TEXT" );
} }
/**
* Function IncrementLabel
* increments the label text.
*/
void IncrementLabel();
/** /**
* Function SetTextOrientAndJustifyParmeters * Function SetTextOrientAndJustifyParmeters
@ -161,15 +169,16 @@ public:
m_Pos += aMoveVector; m_Pos += aMoveVector;
} }
/**
/** virtual function Mirror_Y * Function Mirror_Y
* mirror item relative to an Y axis * mirrors the item relative to \a aYaxisPosition.
* @param aYaxis_position = the y axis position * @param aYaxis_position The y axis coordinate to mirror around.
*/ */
virtual void Rotate( wxPoint rotationPoint );
virtual void Mirror_Y( int aYaxis_position ); virtual void Mirror_Y( int aYaxis_position );
virtual void Mirror_X( int aXaxis_position );
virtual void Rotate( wxPoint rotationPoint );
virtual void Mirror_X( int aXaxis_position );
/** /**
* Compare schematic text entry against search string. * Compare schematic text entry against search string.
@ -196,8 +205,9 @@ public:
#endif #endif
private: private:
virtual bool DoHitTest( const wxPoint& aPoint, int aAccuracy, SCH_FILTER_T aFilter ) const; virtual bool doHitTest( const wxPoint& aPoint, int aAccuracy, SCH_FILTER_T aFilter ) 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;
}; };
@ -205,6 +215,9 @@ class SCH_LABEL : public SCH_TEXT
{ {
public: public:
SCH_LABEL( const wxPoint& pos = wxPoint( 0, 0 ), const wxString& text = wxEmptyString ); SCH_LABEL( const wxPoint& pos = wxPoint( 0, 0 ), const wxString& text = wxEmptyString );
SCH_LABEL( const SCH_LABEL& aLabel );
~SCH_LABEL() { } ~SCH_LABEL() { }
virtual void Draw( WinEDA_DrawPanel* panel, virtual void Draw( WinEDA_DrawPanel* panel,
@ -218,7 +231,6 @@ public:
return wxT( "SCH_LABEL" ); return wxT( "SCH_LABEL" );
} }
/** /**
* Function SetTextOrientAndJustifyParmeters * Function SetTextOrientAndJustifyParmeters
* Set m_SchematicOrientation, and initialize * Set m_SchematicOrientation, and initialize
@ -243,7 +255,9 @@ public:
* wire) * wire)
*/ */
virtual wxPoint GetSchematicTextOffset(); virtual wxPoint GetSchematicTextOffset();
virtual void Mirror_X( int aXaxis_position ); virtual void Mirror_X( int aXaxis_position );
virtual void Rotate( wxPoint rotationPoint ); virtual void Rotate( wxPoint rotationPoint );
/** /**
@ -275,7 +289,8 @@ public:
virtual bool Load( LINE_READER& aLine, wxString& aErrorMsg ); virtual bool Load( LINE_READER& aLine, wxString& aErrorMsg );
private: private:
virtual bool DoHitTest( const wxPoint& aPoint, int aAccuracy, SCH_FILTER_T aFilter ) const; virtual bool doHitTest( const wxPoint& aPoint, int aAccuracy, SCH_FILTER_T aFilter ) const;
virtual EDA_ITEM* doClone() const;
}; };
@ -283,6 +298,9 @@ class SCH_GLOBALLABEL : public SCH_TEXT
{ {
public: public:
SCH_GLOBALLABEL( const wxPoint& pos = wxPoint( 0, 0 ), const wxString& text = wxEmptyString ); SCH_GLOBALLABEL( const wxPoint& pos = wxPoint( 0, 0 ), const wxString& text = wxEmptyString );
SCH_GLOBALLABEL( const SCH_GLOBALLABEL& aGlobalLabel );
~SCH_GLOBALLABEL() { } ~SCH_GLOBALLABEL() { }
virtual void Draw( WinEDA_DrawPanel* panel, virtual void Draw( WinEDA_DrawPanel* panel,
@ -296,7 +314,6 @@ public:
return wxT( "SCH_GLOBALLABEL" ); return wxT( "SCH_GLOBALLABEL" );
} }
/** /**
* Function SetTextOrientAndJustifyParmeters * Function SetTextOrientAndJustifyParmeters
* Set m_SchematicOrientation, and initialize * Set m_SchematicOrientation, and initialize
@ -356,8 +373,7 @@ public:
* @param aCorner_list = a buffer to fill with polygon corners coordinates * @param aCorner_list = a buffer to fill with polygon corners coordinates
* @param aPos = Position of the shape * @param aPos = Position of the shape
*/ */
virtual void CreateGraphicShape( std::vector <wxPoint>& aCorner_list, virtual void CreateGraphicShape( std::vector <wxPoint>& aCorner_list, const wxPoint& aPos );
const wxPoint& aPos );
/** virtual function Mirror_Y /** virtual function Mirror_Y
* mirror item relative to an Y axis * mirror item relative to an Y axis
@ -370,7 +386,8 @@ public:
virtual void Rotate( wxPoint rotationPoint ); virtual void Rotate( wxPoint rotationPoint );
private: private:
virtual bool DoHitTest( const wxPoint& aPoint, int aAccuracy, SCH_FILTER_T aFilter ) const; virtual bool doHitTest( const wxPoint& aPoint, int aAccuracy, SCH_FILTER_T aFilter ) const;
virtual EDA_ITEM* doClone() const;
}; };
@ -381,7 +398,10 @@ public:
const wxString& text = wxEmptyString, const wxString& text = wxEmptyString,
KICAD_T aType = SCH_HIERARCHICAL_LABEL_T ); KICAD_T aType = SCH_HIERARCHICAL_LABEL_T );
SCH_HIERLABEL( const SCH_HIERLABEL& aHierLabel );
~SCH_HIERLABEL() { } ~SCH_HIERLABEL() { }
virtual void Draw( WinEDA_DrawPanel* panel, virtual void Draw( WinEDA_DrawPanel* panel,
wxDC* DC, wxDC* DC,
const wxPoint& offset, const wxPoint& offset,
@ -393,7 +413,6 @@ public:
return wxT( "SCH_HIERLABEL" ); return wxT( "SCH_HIERLABEL" );
} }
/** /**
* Function SetTextOrientAndJustifyParmeters * Function SetTextOrientAndJustifyParmeters
* Set m_SchematicOrientation, and initialize * Set m_SchematicOrientation, and initialize
@ -425,8 +444,7 @@ public:
* @param aCorner_list = a buffer to fill with polygon corners coordinates * @param aCorner_list = a buffer to fill with polygon corners coordinates
* @param Pos = Postion of the shape * @param Pos = Postion of the shape
*/ */
virtual void CreateGraphicShape( std::vector <wxPoint>& aCorner_list, virtual void CreateGraphicShape( std::vector <wxPoint>& aCorner_list, const wxPoint& Pos );
const wxPoint& Pos );
/** /**
* Function Save * Function Save
@ -467,7 +485,8 @@ public:
virtual void Rotate( wxPoint rotationPoint ); virtual void Rotate( wxPoint rotationPoint );
private: private:
virtual bool DoHitTest( const wxPoint& aPoint, int aAccuracy, SCH_FILTER_T aFilter ) const; virtual bool doHitTest( const wxPoint& aPoint, int aAccuracy, SCH_FILTER_T aFilter ) const;
virtual EDA_ITEM* doClone() const;
}; };
#endif /* CLASS_TEXT_LABEL_H */ #endif /* CLASS_TEXT_LABEL_H */

View File

@ -17,9 +17,11 @@
#include "eeschema_id.h" #include "eeschema_id.h"
#include "protos.h" #include "protos.h"
#include "class_library.h" #include "class_library.h"
#include "sch_bus_entry.h"
#include "sch_marker.h" #include "sch_marker.h"
#include "sch_component.h" #include "sch_component.h"
#include "sch_items.h" #include "sch_items.h"
#include "sch_line.h"
#include "sch_sheet.h" #include "sch_sheet.h"
@ -454,7 +456,6 @@ void SCH_EDIT_FRAME::Process_Special_Functions( wxCommandEvent& event )
case ID_POPUP_SCH_DRAG_WIRE_REQUEST: case ID_POPUP_SCH_DRAG_WIRE_REQUEST:
DrawPanel->MouseToCursorSchema(); DrawPanel->MouseToCursorSchema();
// The easiest way to handle a drag component is to simulate a // The easiest way to handle a drag component is to simulate a
// block drag command // block drag command
if( screen->m_BlockLocate.m_State == STATE_NO_BLOCK ) if( screen->m_BlockLocate.m_State == STATE_NO_BLOCK )
@ -472,13 +473,12 @@ void SCH_EDIT_FRAME::Process_Special_Functions( wxCommandEvent& event )
// TODO: a better way to drag only wires // TODO: a better way to drag only wires
SCH_LINE* segm = (SCH_LINE*) screen->GetCurItem(); SCH_LINE* segm = (SCH_LINE*) screen->GetCurItem();
if( !screen->m_BlockLocate.Inside( segm->m_Start ) if( !screen->m_BlockLocate.Contains( segm->m_Start )
&& !screen->m_BlockLocate.Inside( segm->m_End ) ) && !screen->m_BlockLocate.Contains( segm->m_End ) )
{ {
screen->m_BlockLocate.SetOrigin( segm->m_Start ); screen->m_BlockLocate.SetOrigin( segm->m_Start );
screen->m_BlockLocate.SetEnd( segm->m_End ); screen->m_BlockLocate.SetEnd( segm->m_End );
} }
HandleBlockEnd( &dc ); HandleBlockEnd( &dc );
} }
break; break;

View File

@ -10,9 +10,13 @@
#include "general.h" #include "general.h"
#include "protos.h" #include "protos.h"
#include "sch_bus_entry.h"
#include "sch_marker.h" #include "sch_marker.h"
#include "sch_items.h" #include "sch_items.h"
#include "sch_line.h"
#include "sch_no_connect.h"
#include "sch_component.h" #include "sch_component.h"
#include "sch_polyline.h"
#include "sch_sheet.h" #include "sch_sheet.h"

View File

@ -242,6 +242,15 @@ static void RedrawWhileMovingCursor( WinEDA_DrawPanel* panel, wxDC* DC, bool era
BASE_SCREEN* Screen = panel->GetScreen(); BASE_SCREEN* Screen = panel->GetScreen();
item->SetEraseLastDrawItem( erase ); item->SetEraseLastDrawItem( erase );
// if item is the reference field, we must add the current unit id
if( item->Type() == LIB_FIELD_T )
{
int unit = ((LIB_EDIT_FRAME*)panel->GetParent())->GetUnit();
wxString text = ((LIB_FIELD*)item)->GetFullText( unit );
item->Draw( panel, DC, Screen->GetCursorDrawPosition(), -1, g_XorMode, &text,
DefaultTransform );
}
else
item->Draw( panel, DC, Screen->GetCursorDrawPosition(), -1, g_XorMode, NULL, item->Draw( panel, DC, Screen->GetCursorDrawPosition(), -1, g_XorMode, NULL,
DefaultTransform ); DefaultTransform );
} }
@ -254,9 +263,6 @@ void LIB_EDIT_FRAME::StartMoveDrawSymbol( wxDC* DC )
SetCursor( wxCURSOR_HAND ); SetCursor( wxCURSOR_HAND );
if( m_drawItem->GetUnit() != m_unit )
m_drawItem->SetUnit( m_unit );
TempCopyComponent(); TempCopyComponent();
m_drawItem->BeginEdit( IS_MOVED, GetScreen()->GetCursorDrawPosition() ); m_drawItem->BeginEdit( IS_MOVED, GetScreen()->GetCursorDrawPosition() );
DrawPanel->ManageCurseur = RedrawWhileMovingCursor; DrawPanel->ManageCurseur = RedrawWhileMovingCursor;

View File

@ -668,10 +668,10 @@ bool GERBER_DRAW_ITEM::HitTest( EDA_Rect& aRefArea )
{ {
wxPoint pos = GetABPosition( m_Start ); wxPoint pos = GetABPosition( m_Start );
if( aRefArea.Inside( pos ) ) if( aRefArea.Contains( pos ) )
return true; return true;
pos = GetABPosition( m_End ); pos = GetABPosition( m_End );
if( aRefArea.Inside( pos ) ) if( aRefArea.Contains( pos ) )
return true; return true;
return false; return false;
} }

View File

@ -124,7 +124,7 @@ WinEDA_ConfigFrame::WinEDA_ConfigFrame( WinEDA_GerberFrame* parent,
} }
void WinEDA_ConfigFrame::OnOkClick( wxCommandEvent &event ) void WinEDA_ConfigFrame::OnOkClick( wxCommandEvent& event )
{ {
g_DrillFilenameExt = TextDrillExt->GetValue(); g_DrillFilenameExt = TextDrillExt->GetValue();
g_PhotoFilenameExt = TextPhotoExt->GetValue(); g_PhotoFilenameExt = TextPhotoExt->GetValue();
@ -134,7 +134,7 @@ void WinEDA_ConfigFrame::OnOkClick( wxCommandEvent &event )
} }
void WinEDA_ConfigFrame::OnCancelClick( wxCommandEvent &event ) void WinEDA_ConfigFrame::OnCancelClick( wxCommandEvent& event )
{ {
EndModal( -1 ); EndModal( -1 );
} }

View File

@ -76,11 +76,23 @@ protected:
public: WinEDA_App(); public: WinEDA_App();
~WinEDA_App(); ~WinEDA_App();
/**
* Function OnInit
* this is the first executed function (like main() )
* @return true if the appliction can be started.
*/
bool OnInit(); bool OnInit();
bool SetBinDir(); bool SetBinDir();
void SetDefaultSearchPaths( void ); void SetDefaultSearchPaths( void );
/**
* Function MacOpenFile
* Specific to MacOSX. Not used under Linux or Windows
* MacOSX: Needed for file association
* http://wiki.wxwidgets.org/WxMac-specific_topics
*/
virtual void MacOpenFile(const wxString &fileName); virtual void MacOpenFile(const wxString &fileName);
/** /**

View File

@ -7,14 +7,16 @@
#include "colors.h" #include "colors.h"
#include <boost/ptr_container/ptr_vector.hpp>
#if defined(DEBUG) #if defined(DEBUG)
#include <iostream> // needed for Show() #include <iostream> // needed for Show()
extern std::ostream& operator <<( std::ostream& out, const wxSize& size ); extern std::ostream& operator <<( std::ostream& out, const wxSize& size );
extern std::ostream& operator <<( std::ostream& out, const wxPoint& pt ); extern std::ostream& operator <<( std::ostream& out, const wxPoint& pt );
#endif #endif
/* Id for class identification, at run time */ /* Id for class identification, at run time */
enum KICAD_T { enum KICAD_T {
NOT_USED = -1, // the 3d code uses this value NOT_USED = -1, // the 3d code uses this value
@ -146,7 +148,9 @@ public:
* Class EDA_Rect * Class EDA_Rect
* handles the component boundary box. * handles the component boundary box.
* This class is similar to wxRect, but some wxRect functions are very curious, * This class is similar to wxRect, but some wxRect functions are very curious,
* so I prefer this suitable class * and are working only if dimensions are >= 0 (not always the case in kicad)
* and also kicad needs some specific method.
* so I prefer this more suitable class
*/ */
class EDA_Rect class EDA_Rect
{ {
@ -168,16 +172,40 @@ public:
m_Pos.y + ( m_Size.y >> 1 ) ); m_Pos.y + ( m_Size.y >> 1 ) );
} }
/**
/* Move this by the aMoveVector value (this is a relative move * Function Move
* moves the rectangle by the \a aMoveVector.
* @param aMoveVector A wxPoint that is the value to move this rectangle
*/ */
void Move( const wxPoint& aMoveVector ); void Move( const wxPoint& aMoveVector );
void Normalize(); // Ensure the height and width are >= 0 /**
bool Inside( const wxPoint& point ) const; // Return TRUE if point is in Rect * Function Normalize
* ensures thatthe height ant width are positive.
*/
void Normalize();
/**
* Function Contains
* @param aPoint = the wxPoint to test
* @return true if aPoint is inside the boundary box. A point on a edge is seen as inside
*/
bool Contains( const wxPoint& aPoint ) const;
/**
* Function Contains
* @param x = the x coordinate of the point to test
* @param y = the x coordinate of the point to test
* @return true if point is inside the boundary box. A point on a edge is seen as inside
*/
bool Contains( int x, int y ) const { return Contains( wxPoint( x, y ) ); }
/**
* Function Contains
* @param aRect = the EDA_Rect to test
* @return true if aRect is Contained. A common edge is seen as contained
*/
bool Contains( const EDA_Rect& aRect ) const;
bool Inside( int x, int y ) const { return Inside( wxPoint( x, y ) ); }
bool Inside( const EDA_Rect& aRect ) const;
wxSize GetSize() const { return m_Size; } wxSize GetSize() const { return m_Size; }
int GetX() const { return m_Pos.x; } int GetX() const { return m_Pos.x; }
int GetY() const { return m_Pos.y; } int GetY() const { return m_Pos.y; }
@ -209,9 +237,9 @@ public:
/** /**
* Function Intersects * Function Intersects
* @return bool - true if the argument rectangle intersects this rectangle. * @return bool - true if the argument rectangle intersects this rectangle.
* (i.e. if the 2 rectangles have at least a common point)
*/ */
bool Intersects( const EDA_Rect aRect ) const; bool Intersects( const EDA_Rect& aRect ) const;
/** /**
* Function operator(wxRect) * Function operator(wxRect)
@ -219,35 +247,32 @@ public:
*/ */
operator wxRect() const { return wxRect( m_Pos, m_Size ); } operator wxRect() const { return wxRect( m_Pos, m_Size ); }
/** Inflate /**
* Inflate this object: move each horizontal edge by dx and each vertical * Function Inflate
* edge by dy toward rect outside * inflates the rectangle horizontally by \a dx and vertically by \a dy. If \a dx
* if dx and/or dy is negative, move toward rect inside (deflate) * and/or \a dy is negative the rectangle is deflated.
* Works for positive and negative rect size
*/ */
EDA_Rect& Inflate( wxCoord dx, wxCoord dy ); EDA_Rect& Inflate( wxCoord dx, wxCoord dy );
/** Inflate /**
* Inflate this object: move each horizontal edge and each vertical edge by * Function Inflate
* aDelta toward rect outside * inflates the rectangle horizontally and vertically by \a aDelta. If \a aDelta
* if aDelta is negative, move toward rect inside (deflate) * is negative the rectangle is deflated.
* Works for positive and negative rect size
*/ */
EDA_Rect& Inflate( int aDelta ); EDA_Rect& Inflate( int aDelta );
/** /**
* Function Merge * Function Merge
* Modify Position and Size of this in order to contain the given rect * modifies the position and size of the rectangle in order to contain \a aRect. It is
* mainly used to calculate bounding boxes * mainly used to calculate bounding boxes.
* @param aRect = given rect to merge with this * @param aRect The rectangle to merge with this rectangle.
*/ */
void Merge( const EDA_Rect& aRect ); void Merge( const EDA_Rect& aRect );
/** /**
* Function Merge * Function Merge
* Modify Position and Size of this in order to contain the given point * modifies the position and size of the rectangle in order to contain the given point.
* mainly used to calculate bounding boxes * @param aPoint The point to merge with the rectangle.
* @param aPoint = given point to merge with this
*/ */
void Merge( const wxPoint& aPoint ); void Merge( const wxPoint& aPoint );
}; };
@ -319,6 +344,21 @@ public:
private: private:
void InitVars(); void InitVars();
/**
* @brief Function doClone
* is used by the derived class to actually implement the cloning.
*
* The default version will return NULL in release builds and likely crash the
* program. In debug builds, an warning message indicating the derived class
* has not implemented cloning. This really should be a pure virtual function.
* Due to the fact that there are so many objects derived from EDA_ITEM, the
* decision was made to return NULL until all the objects derived from EDA_ITEM
* implement cloning. Once that happens, this function should be made pure.
*
* @return A clone of the item.
*/
virtual EDA_ITEM* doClone() const;
public: public:
EDA_ITEM( EDA_ITEM* parent, KICAD_T idType ); EDA_ITEM( EDA_ITEM* parent, KICAD_T idType );
@ -392,7 +432,6 @@ public:
// derived classes may implement this // derived classes may implement this
} }
/** /**
* Function HitTest * Function HitTest
* tests if the given wxPoint is within the bounds of this object. * tests if the given wxPoint is within the bounds of this object.
@ -404,7 +443,6 @@ public:
return false; // derived classes should override this function return false; // derived classes should override this function
} }
/** /**
* Function HitTest (overlaid) * Function HitTest (overlaid)
* tests if the given EDA_Rect intersect this object. * tests if the given EDA_Rect intersect this object.
@ -417,7 +455,6 @@ public:
return false; // derived classes should override this function return false; // derived classes should override this function
} }
/** /**
* Function GetBoundingBox * Function GetBoundingBox
* returns the orthogonal, bounding box of this object for display * returns the orthogonal, bounding box of this object for display
@ -439,6 +476,16 @@ public:
return EDA_Rect( wxPoint( 0, 0 ), wxSize( 0, 0 ) ); return EDA_Rect( wxPoint( 0, 0 ), wxSize( 0, 0 ) );
} }
/**
* @brief Function Clone
* creates a duplicate of this item with linked list members set to NULL.
*
* The Clone() function only calls the private virtual doClone() which actually
* does the cloning for the derived object.
*
* @return A clone of the item.
*/
EDA_ITEM* Clone() const { return doClone(); }
/** /**
* Function IterateForward * Function IterateForward
@ -517,6 +564,25 @@ public:
}; };
/**
* Function new_clone
* provides cloning capabilities for all Boost pointer containers of EDA_ITEMs.
*
* @param aItem EDA_ITEM to clone.
* @return Clone of \a aItem.
*/
inline EDA_ITEM* new_clone( const EDA_ITEM& aItem ) { return aItem.Clone(); }
/**
* Define list of drawing items for screens.
*
* The Boost containter was choosen over the statand C++ contain because you can detach
* the pointer from a list with the release method.
*/
typedef boost::ptr_vector< EDA_ITEM > EDA_ITEMS;
// Graphic Text justify: // Graphic Text justify:
// Values -1,0,1 are used in computations, do not change them // Values -1,0,1 are used in computations, do not change them
enum GRTextHorizJustifyType { enum GRTextHorizJustifyType {
@ -586,6 +652,7 @@ public:
public: public:
EDA_TextStruct( const wxString& text = wxEmptyString ); EDA_TextStruct( const wxString& text = wxEmptyString );
EDA_TextStruct( const EDA_TextStruct& aText );
virtual ~EDA_TextStruct(); virtual ~EDA_TextStruct();
int GetLength() const { return m_Text.Length(); }; int GetLength() const { return m_Text.Length(); };

View File

@ -14,22 +14,11 @@
#include "block_commande.h" #include "block_commande.h"
#include "common.h" #include "common.h"
#include <boost/ptr_container/ptr_vector.hpp>
// Forward declarations: // Forward declarations:
class Ki_PageDescr; class Ki_PageDescr;
/**
* Define list of drawing items for screens.
*
* The Boost containter was choosen over the statand C++ contain because you can detach
* the pointer from a list with the release method.
*/
typedef boost::ptr_vector< EDA_ITEM > EDA_ITEMS;
/* Simple class for handling grid arrays. */ /* Simple class for handling grid arrays. */
class GRID_TYPE class GRID_TYPE
{ {

View File

@ -15,8 +15,11 @@ protected:
std::vector <wxPoint> m_Corners; ///< Corner list for shape definition (a polygon) std::vector <wxPoint> m_Corners; ///< Corner list for shape definition (a polygon)
int m_MarkerType; ///< Can be used as a flag int m_MarkerType; ///< Can be used as a flag
EDA_Colors m_Color; ///< color EDA_Colors m_Color; ///< color
EDA_Rect m_ShapeBoundingBox; ///< Bounding box of the graphic symbol, relative to the position of the shape, used for Hit Tests EDA_Rect m_ShapeBoundingBox; ///< Bounding box of the graphic symbol, relative
int m_ScalingFactor; ///< Scaling factor for m_Size and m_Corners (can set the physical size ///< to the position of the shape, used for Hit
///< Tests
int m_ScalingFactor; ///< Scaling factor for m_Size and m_Corners (can
///< set the physical size
DRC_ITEM m_drc; DRC_ITEM m_drc;
void init(); void init();
@ -48,14 +51,21 @@ public:
MARKER_BASE( int aErrorCode, const wxPoint& aMarkerPos, MARKER_BASE( int aErrorCode, const wxPoint& aMarkerPos,
const wxString& aText, const wxPoint& aPos ); const wxString& aText, const wxPoint& aPos );
/**
* Contructor
* makes a copy of \a aMarker but does not copy the DRC_ITEM.
*
* @param aMarker The marker to copy.
*/
MARKER_BASE( const MARKER_BASE& aMarker );
~MARKER_BASE(); ~MARKER_BASE();
/** /**
* Function DrawMarker * Function DrawMarker
* draws the shape is the polygon defined in m_Corners (array of wxPoints).
*/ */
void DrawMarker( WinEDA_DrawPanel* panel, wxDC* DC, int DrawMode, const wxPoint& offset ); void DrawMarker( WinEDA_DrawPanel* aPanel, wxDC* aDC, int aDrawMode, const wxPoint& aOffset );
/** /**
* Function GetPos * Function GetPos
@ -66,7 +76,6 @@ public:
return m_Pos; return m_Pos;
} }
/** /**
* Function SetColor * Function SetColor
* Set the color of this marker * Set the color of this marker
@ -76,7 +85,6 @@ public:
m_Color = aColor; m_Color = aColor;
} }
/** /**
* Function to set/get error levels (warning, fatal ..) * Function to set/get error levels (warning, fatal ..)
* this value is stored in m_MarkerType * this value is stored in m_MarkerType
@ -88,13 +96,11 @@ public:
m_MarkerType |= aErrorLevel << 8; m_MarkerType |= aErrorLevel << 8;
} }
int GetErrorLevel() const int GetErrorLevel() const
{ {
return (m_MarkerType >> 8) & 0xFF; return (m_MarkerType >> 8) & 0xFF;
} }
/** Functions to set/get marker type (DRC, ERC, or other) /** Functions to set/get marker type (DRC, ERC, or other)
* this value is stored in m_MarkerType * this value is stored in m_MarkerType
*/ */
@ -105,13 +111,11 @@ public:
m_MarkerType |= aMarkerType; m_MarkerType |= aMarkerType;
} }
int GetMarkerType() const int GetMarkerType() const
{ {
return m_MarkerType & 0xFF; return m_MarkerType & 0xFF;
} }
/** /**
* Function SetData * Function SetData
* fills in all the reportable data associated with a MARKER. * fills in all the reportable data associated with a MARKER.
@ -137,11 +141,11 @@ public:
void SetData( int aErrorCode, const wxPoint& aMarkerPos, void SetData( int aErrorCode, const wxPoint& aMarkerPos,
const wxString& aText, const wxPoint& aPos ); const wxString& aText, const wxPoint& aPos );
/** /**
* Function SetAuxiliaryData * Function SetAuxiliaryData
* initialize data for the second (auxiliary) item * initialize data for the second (auxiliary) item
* @param aAuxiliaryText = the second text (main text) concerning the second schematic or board item * @param aAuxiliaryText = the second text (main text) concerning the second schematic or
* board item
* @param aAuxiliaryPos = position the second item * @param aAuxiliaryPos = position the second item
*/ */
void SetAuxiliaryData( const wxString& aAuxiliaryText, const wxPoint& aAuxiliaryPos ) void SetAuxiliaryData( const wxString& aAuxiliaryText, const wxPoint& aAuxiliaryPos )
@ -165,12 +169,11 @@ public:
return m_drc; return m_drc;
} }
/** /**
* Function DisplayMarkerInfo * Function DisplayMarkerInfo
* Displays the full info of this marker, in a HTML window * displays the full info of this marker, in a HTML window.
*/ */
void DisplayMarkerInfo(WinEDA_DrawFrame * aFrame); void DisplayMarkerInfo( WinEDA_DrawFrame* aFrame );
/** /**
* Function HitTestMarker * Function HitTestMarker

View File

@ -137,17 +137,18 @@ void DisplayHotkeyList( WinEDA_DrawFrame* aFrame
*/ */
Ki_HotkeyInfo* GetDescriptorFromHotkey( int aKey, Ki_HotkeyInfo** aList ); Ki_HotkeyInfo* GetDescriptorFromHotkey( int aKey, Ki_HotkeyInfo** aList );
/** function ReadHotkeyConfig * Read hotkey configuration for a given /**
app, possibly before the frame for that app has been created * Function ReadHotkeyConfig
* Read hotkey configuration for a given app,
@param Appname = the value of the app's m_FrameName * possibly before the frame for that app has been created
@param DescList = the hotkey data * @param Appname = the value of the app's m_FrameName
* @param aDescList = the hotkey data
*/ */
void ReadHotkeyConfig( const wxString& Appname, void ReadHotkeyConfig( const wxString& Appname,
struct Ki_HotkeyInfoSectionDescriptor* DescList ); struct Ki_HotkeyInfoSectionDescriptor* aDescList );
void ParseHotkeyConfig( const wxString& data, void ParseHotkeyConfig( const wxString& data,
struct Ki_HotkeyInfoSectionDescriptor* DescList ); struct Ki_HotkeyInfoSectionDescriptor* aDescList );
// common hotkeys event id // common hotkeys event id

View File

@ -39,6 +39,16 @@ enum SCH_FILTER_T {
}; };
/* used to calculate the pen size from default value
* the actual pen size is default value * BUS_WIDTH_EXPAND
*/
#if defined(KICAD_GOST)
#define BUS_WIDTH_EXPAND 3.6
#else
#define BUS_WIDTH_EXPAND 1.4
#endif
enum DANGLING_END_T { enum DANGLING_END_T {
UNKNOWN = 0, UNKNOWN = 0,
WIRE_START_END, WIRE_START_END,
@ -84,6 +94,8 @@ protected:
public: public:
SCH_ITEM( EDA_ITEM* aParent, KICAD_T aType ); SCH_ITEM( EDA_ITEM* aParent, KICAD_T aType );
SCH_ITEM( const SCH_ITEM& aItem );
~SCH_ITEM(); ~SCH_ITEM();
virtual wxString GetClass() const virtual wxString GetClass() const
@ -91,6 +103,8 @@ public:
return wxT( "SCH_ITEM" ); return wxT( "SCH_ITEM" );
} }
SCH_ITEM* Clone() const { return ( SCH_ITEM* ) EDA_ITEM::Clone(); }
SCH_ITEM* Next() { return (SCH_ITEM*) Pnext; } SCH_ITEM* Next() { return (SCH_ITEM*) Pnext; }
SCH_ITEM* Back() { return (SCH_ITEM*) Pback; } SCH_ITEM* Back() { return (SCH_ITEM*) Pback; }
@ -122,37 +136,38 @@ public:
int aDrawMode, int aDrawMode,
int aColor = -1 ) = 0; int aColor = -1 ) = 0;
/* Place function */ /* Place function */
virtual void Place( SCH_EDIT_FRAME* aFrame, wxDC* aDC ); virtual void Place( SCH_EDIT_FRAME* aFrame, wxDC* aDC );
// Geometric transforms (used in block operations): /**
/** virtual function Move * Function Move
* move item to a new position. * moves the item by \a aMoveVector to a new position.
* @param aMoveVector = the deplacement vector * @param aMoveVector = the deplacement vector
*/ */
virtual void Move( const wxPoint& aMoveVector ) = 0; virtual void Move( const wxPoint& aMoveVector ) = 0;
/** virtual function Mirror_Y /**
* mirror item relative to an Y axis * Function Mirror_Y
* @param aYaxis_position = the y axis position * mirrors item relative to an Y axis about \a aYaxis_position.
* @param aYaxis_position The Y axis position to mirror around.
*/ */
virtual void Mirror_Y( int aYaxis_position ) = 0; virtual void Mirror_Y( int aYaxis_position ) = 0;
virtual void Mirror_X( int aXaxis_position ) = 0;
virtual void Rotate( wxPoint rotationPoint ) = 0;
virtual void Mirror_X( int aXaxis_position ) = 0;
virtual void Rotate( wxPoint rotationPoint ) = 0;
/** /**
* Function Save * Function Save
* writes the data structures for this object out to a FILE in "*.sch" * writes the data structures for this object out to a FILE in "*.sch" format.
* format.
* @param aFile The FILE to write to. * @param aFile The FILE to write to.
* @return bool - true if success writing else false. * @return bool - true if success writing else false.
*/ */
virtual bool Save( FILE* aFile ) const = 0; virtual bool Save( FILE* aFile ) const = 0;
/** /**
* Load schematic item from \a aLine in a .sch file. * Function Load
* reads a schematic item from \a aLine in a .sch file.
* *
* @param aLine - Essentially this is file to read the object from. * @param aLine - Essentially this is file to read the object from.
* @param aErrorMsg - Description of the error if an error occurs while loading the object. * @param aErrorMsg - Description of the error if an error occurs while loading the object.
@ -161,7 +176,8 @@ public:
virtual bool Load( LINE_READER& aLine, wxString& aErrorMsg ) { return false; } virtual bool Load( LINE_READER& aLine, wxString& aErrorMsg ) { return false; }
/** /**
* Compare schematic item against search string. * Function Matches
* compares the schematic item against search \a aSearchData.
* *
* The base class returns false since many of the objects derived from * The base class returns false since many of the objects derived from
* SCH_ITEM do not have any text to search. * SCH_ITEM do not have any text to search.
@ -190,7 +206,8 @@ public:
bool Matches( const wxString& aText, wxFindReplaceData& aSearchData ); bool Matches( const wxString& aText, wxFindReplaceData& aSearchData );
/** /**
* Add schematic item end points to \a aItemList if the item has endpoints. * Function GetEndPoints
* adds the schematic item end points to \a aItemList if the item has end points.
* *
* The default version doesn't do anything since many of the schematic object cannot * The default version doesn't do anything since many of the schematic object cannot
* be tested for dangling ends. If you add a new schematic item that can have a * be tested for dangling ends. If you add a new schematic item that can have a
@ -202,7 +219,8 @@ public:
virtual void GetEndPoints( vector< DANGLING_END_ITEM >& aItemList ) {} virtual void GetEndPoints( vector< DANGLING_END_ITEM >& aItemList ) {}
/** /**
* Test the schematic item to \a aItemList to check if it's dangling state has changed. * Function IsDanglingStateChanged
* tests the schematic item to \a aItemList to check if it's dangling state has changed.
* *
* Note that the return value only true when the state of the test has changed. Use * Note that the return value only true when the state of the test has changed. Use
* the IsDangling() method to get the current dangling state of the item. Some of * the IsDangling() method to get the current dangling state of the item. Some of
@ -218,9 +236,10 @@ public:
virtual bool IsDangling() const { return false; } virtual bool IsDangling() const { return false; }
/** /**
* Check if the selection state of an item inside \a aRect has changed. * Function IsSelectStateChanged
* checks if the selection state of an item inside \a aRect has changed.
* *
* The is used by the block selection code to verify if an item is selected or not. * This is used by the block selection code to verify if an item is selected or not.
* True is be return anytime the select state changes. If you need to know the * True is be return anytime the select state changes. If you need to know the
* the current selection state, use the IsSelected() method. * the current selection state, use the IsSelected() method.
* *
@ -229,16 +248,18 @@ public:
virtual bool IsSelectStateChanged( const wxRect& aRect ) { return false; } virtual bool IsSelectStateChanged( const wxRect& aRect ) { return false; }
/** /**
* Get a list of connection points for this item. * Function GetConnectionPoints
* add all the connection points for this item to \a aPoints.
* *
* Not all schematic items have connection points so the default method does nothing. * Not all schematic items have connection points so the default method does nothing.
* *
* @param aPoints - List of connection points to add to. * @param aPoints List of connection points to add to.
*/ */
virtual void GetConnectionPoints( vector< wxPoint >& aPoints ) const { } virtual void GetConnectionPoints( vector< wxPoint >& aPoints ) const { }
/** /**
* Clear all of the connection items from the list. * Function ClearConnections
* clears all of the connection items from the list.
* *
* The vector release method is used to prevent the item pointers from being deleted. * The vector release method is used to prevent the item pointers from being deleted.
* Do not use the vector erase method on the connection list. * Do not use the vector erase method on the connection list.
@ -246,8 +267,8 @@ public:
void ClearConnections() { m_connections.release(); } void ClearConnections() { m_connections.release(); }
/** /**
* Function IsConnected(). * Function IsConnected
* Test \a aPoint to see if it is connected to this schematic object. * tests the item to see if it is connected to \a aPoint.
* *
* @param aPoint - Position to test for connection. * @param aPoint - Position to test for connection.
* @return True if connection to \a aPoint exists. * @return True if connection to \a aPoint exists.
@ -255,8 +276,8 @@ public:
bool IsConnected( const wxPoint& aPoint ) const; bool IsConnected( const wxPoint& aPoint ) const;
/** /**
* Function HitTest(). * Function HitTest
* Test if \a aPoint is contained within the bounding box or on an item. * tests if \a aPoint is contained within or on the bounding box of an item.
* *
* @param aPoint - Point to test. * @param aPoint - Point to test.
* @param aAccuracy - Increase the item bounding box by this amount. * @param aAccuracy - Increase the item bounding box by this amount.
@ -266,21 +287,21 @@ public:
bool HitTest( const wxPoint& aPoint, int aAccuracy = 0, bool HitTest( const wxPoint& aPoint, int aAccuracy = 0,
SCH_FILTER_T aFilter = NO_FILTER_T ) const SCH_FILTER_T aFilter = NO_FILTER_T ) const
{ {
return DoHitTest( aPoint, aAccuracy, aFilter ); return doHitTest( aPoint, aAccuracy, aFilter );
} }
/** /**
* Function HitTest(). * Function HitTest
* Test if \a aRect intersects or is contained within the bounding box of an item. * tests if \a aRect intersects or is contained within the bounding box of an item.
* *
* @param aRect - Rectangle to test. * @param aRect - Rectangle to test.
* @param aContained - Set to true to test for containment instead of an intersection. * @param aContained - Set to true to test for containment instead of an intersection.
* @param aAccuracy - Increase the item bounding box by this amount. * @param aAccuracy - Increase aRect by this amount.
* @return True if \a aRect contains or intersects the item bounding box. * @return True if \a aRect contains or intersects the item bounding box.
*/ */
bool HitTest( const EDA_Rect& aRect, bool aContained = false, int aAccuracy = 0 ) const bool HitTest( const EDA_Rect& aRect, bool aContained = false, int aAccuracy = 0 ) const
{ {
return DoHitTest( aRect, aContained, aAccuracy ); return doHitTest( aRect, aContained, aAccuracy );
} }
/** /**
@ -290,17 +311,17 @@ public:
* http://www.gotw.ca/publications/mill18.htm. * http://www.gotw.ca/publications/mill18.htm.
*/ */
private: private:
virtual bool DoHitTest( const wxPoint& aPoint, int aAccuracy, SCH_FILTER_T aFilter ) const virtual bool doHitTest( const wxPoint& aPoint, int aAccuracy, SCH_FILTER_T aFilter ) const
{ {
return false; return false;
} }
virtual bool DoHitTest( const EDA_Rect& aRect, bool aContained, int aAccuracy ) const virtual bool doHitTest( const EDA_Rect& aRect, bool aContained, int aAccuracy ) const
{ {
return false; return false;
} }
virtual bool DoIsConnected( const wxPoint& aPosition ) const { return false; } virtual bool doIsConnected( const wxPoint& aPosition ) const { return false; }
}; };
#endif /* SCH_ITEM_STRUCT_H */ #endif /* SCH_ITEM_STRUCT_H */

View File

@ -139,7 +139,7 @@ public:
~WinEDA_PcbFrame(); ~WinEDA_PcbFrame();
void OnQuit( wxCommandEvent & WXUNUSED(event) ); void OnQuit( wxCommandEvent& event );
/** /**
* Function ToPlotter * Function ToPlotter
@ -480,7 +480,7 @@ public:
* @param aKey = the key modifiers (Alt, Shift ...) * @param aKey = the key modifiers (Alt, Shift ...)
* @return the block command id (BLOCK_MOVE, BLOCK_COPY...) * @return the block command id (BLOCK_MOVE, BLOCK_COPY...)
*/ */
virtual int ReturnBlockCommand( int key ); virtual int ReturnBlockCommand( int aKey );
/** /**
* Function HandleBlockPlace( ) * Function HandleBlockPlace( )
@ -805,18 +805,19 @@ public:
* Modify a full track width (using DRC control). * Modify a full track width (using DRC control).
* a full track is the set of track segments between 2 ends: pads or a * a full track is the set of track segments between 2 ends: pads or a
* point that has more than 2 segments ends connected * point that has more than 2 segments ends connected
* @param DC = the curred device context (can be NULL) * @param aDC = the curred device context (can be NULL)
* @param aTrackSegment = a segment or via on the track to change * @param aTrackSegment = a segment or via on the track to change
*/ */
void Edit_Track_Width( wxDC* DC, TRACK* Track ); void Edit_Track_Width( wxDC* aDC, TRACK* aTrackSegment );
/** /**
* Function Edit_TrackSegm_Width * Function Edit_TrackSegm_Width
* Modify one track segment width or one via diameter (using DRC control). * Modify one track segment width or one via diameter (using DRC control).
* @param DC = the current device context (can be NULL) * @param aDC = the current device context (can be NULL)
* @param aTrackItem = the track segment or via to modify * @param aTrackItem = the track segment or via to modify
*/ */
void Edit_TrackSegm_Width( wxDC* DC, TRACK* segm ); void Edit_TrackSegm_Width( wxDC* aDC, TRACK* aTrackItem );
TRACK* Begin_Route( TRACK* track, wxDC* DC ); TRACK* Begin_Route( TRACK* track, wxDC* DC );
void End_Route( TRACK* track, wxDC* DC ); void End_Route( TRACK* track, wxDC* DC );
void ExChange_Track_Layer( TRACK* pt_segm, wxDC* DC ); void ExChange_Track_Layer( TRACK* pt_segm, wxDC* DC );
@ -868,7 +869,7 @@ public:
// zone handling // zone handling
/** /**
* Function Delete_Zone_Fill * Function Delete_Zone_Fill (obsolete)
* Remove the zone filling which include the segment aZone, or the zone * Remove the zone filling which include the segment aZone, or the zone
* which have the given time stamp. A zone is a group of segments which * which have the given time stamp. A zone is a group of segments which
* have the same TimeStamp * have the same TimeStamp
@ -876,7 +877,7 @@ public:
* @param aTimestamp = Timestamp for the zone to delete, used if aZone == * @param aTimestamp = Timestamp for the zone to delete, used if aZone ==
* NULL * NULL
*/ */
void Delete_Zone_Fill( SEGZONE* Track, long aTimestamp = 0 ); void Delete_Zone_Fill( SEGZONE* aZone, long aTimestamp = 0 );
/** /**
@ -1033,6 +1034,13 @@ public:
* @param aNetlistFullFilename = netlist file name (*.net) * @param aNetlistFullFilename = netlist file name (*.net)
* @param aCmpFullFileName = cmp/footprint list file name (*.cmp) if not found, * @param aCmpFullFileName = cmp/footprint list file name (*.cmp) if not found,
* only the netlist will be used * only the netlist will be used
* @param aMessageWindow = a reference to a wxTextCtrl where to dislay messages.
* can be NULL
* @param aChangeFootprint if true, footprints that have changed in netlist will be changed
* @param aDeleteBadTracks if true, erroneous tracks will be deleted
* @param aDeleteExtraFootprints if true, remove unlocked footprints that are not in netlist
* @param aSelect_By_Timestamp if true, use timestamp instead of reference to identify footprints
* from components (use after reannotation of the chematic)
* @return true if Ok * @return true if Ok
* *
* the format of the netlist is something like: * the format of the netlist is something like:

View File

@ -17,7 +17,7 @@
; General Product Description Definitions ; General Product Description Definitions
!define PRODUCT_NAME "KiCad" !define PRODUCT_NAME "KiCad"
!define PRODUCT_VERSION "2010.12.18" !define PRODUCT_VERSION "2010.12.22"
!define PRODUCT_WEB_SITE "http://iut-tice.ujf-grenoble.fr/kicad/" !define PRODUCT_WEB_SITE "http://iut-tice.ujf-grenoble.fr/kicad/"
!define SOURCEFORGE_WEB_SITE "http://kicad.sourceforge.net/" !define SOURCEFORGE_WEB_SITE "http://kicad.sourceforge.net/"
!define COMPANY_NAME "" !define COMPANY_NAME ""

View File

@ -224,7 +224,7 @@ void WinEDA_PcbFrame::AutoMoveModulesOnPcb( bool PlaceModulesHorsPcb )
Module = moduleList[ii]; Module = moduleList[ii];
if( PlaceModulesHorsPcb && edgesExists ) if( PlaceModulesHorsPcb && edgesExists )
{ {
if( GetBoard()->m_BoundaryBox.Inside( Module->m_Pos ) ) if( GetBoard()->m_BoundaryBox.Contains( Module->m_Pos ) )
continue; continue;
} }
surface += Module->m_Surface; surface += Module->m_Surface;
@ -243,7 +243,7 @@ void WinEDA_PcbFrame::AutoMoveModulesOnPcb( bool PlaceModulesHorsPcb )
if( PlaceModulesHorsPcb && edgesExists ) if( PlaceModulesHorsPcb && edgesExists )
{ {
if( GetBoard()->m_BoundaryBox.Inside( Module->m_Pos ) ) if( GetBoard()->m_BoundaryBox.Contains( Module->m_Pos ) )
continue; continue;
} }

View File

@ -150,7 +150,7 @@ void WinEDA_PcbFrame::AutoPlaceModule( MODULE* Module,
Module->m_ModuleStatus &= ~MODULE_is_PLACED; Module->m_ModuleStatus &= ~MODULE_is_PLACED;
if( Module->m_ModuleStatus & MODULE_is_LOCKED ) if( Module->m_ModuleStatus & MODULE_is_LOCKED )
break; break;
if( !GetBoard()->m_BoundaryBox.Inside( Module->m_Pos ) ) if( !GetBoard()->m_BoundaryBox.Contains( Module->m_Pos ) )
Module->m_ModuleStatus |= MODULE_to_PLACE; Module->m_ModuleStatus |= MODULE_to_PLACE;
break; break;

View File

@ -657,7 +657,7 @@ int MarkItemsInBloc( MODULE* module, EDA_Rect& Rect )
{ {
pad->m_Selected = 0; pad->m_Selected = 0;
pos = pad->GetPosition(); pos = pad->GetPosition();
if( Rect.Inside( pos ) ) if( Rect.Contains( pos ) )
{ {
pad->m_Selected = IS_SELECTED; pad->m_Selected = IS_SELECTED;
ItemsCount++; ItemsCount++;
@ -673,13 +673,13 @@ int MarkItemsInBloc( MODULE* module, EDA_Rect& Rect )
{ {
case TYPE_EDGE_MODULE: case TYPE_EDGE_MODULE:
pos = ( (EDGE_MODULE*) item )->m_Start; pos = ( (EDGE_MODULE*) item )->m_Start;
if( Rect.Inside( pos ) ) if( Rect.Contains( pos ) )
{ {
item->m_Selected = IS_SELECTED; item->m_Selected = IS_SELECTED;
ItemsCount++; ItemsCount++;
} }
pos = ( (EDGE_MODULE*) item )->m_End; pos = ( (EDGE_MODULE*) item )->m_End;
if( Rect.Inside( pos ) ) if( Rect.Contains( pos ) )
{ {
item->m_Selected = IS_SELECTED; item->m_Selected = IS_SELECTED;
ItemsCount++; ItemsCount++;
@ -688,7 +688,7 @@ int MarkItemsInBloc( MODULE* module, EDA_Rect& Rect )
case TYPE_TEXTE_MODULE: case TYPE_TEXTE_MODULE:
pos = ( (TEXTE_MODULE*) item )->GetPosition(); pos = ( (TEXTE_MODULE*) item )->GetPosition();
if( Rect.Inside( pos ) ) if( Rect.Contains( pos ) )
{ {
item->m_Selected = IS_SELECTED; item->m_Selected = IS_SELECTED;
ItemsCount++; ItemsCount++;

View File

@ -512,8 +512,16 @@ public:
*/ */
void DisplayInfo( WinEDA_DrawFrame* frame ); void DisplayInfo( WinEDA_DrawFrame* frame );
void Draw( WinEDA_DrawPanel* panel, wxDC* DC, /**
int aDrawMode, const wxPoint& offset = ZeroOffset ); * Function Draw.
* Redraw the BOARD items but not cursors, axis or grid.
* @param aPanel = the panel relative to the board
* @param aDC = the curent device context
* @param aDrawMode = GR_COPY, GR_OR ... (not always used)
* @param aOffset = an draw offset value (default = 0,0)
*/
void Draw( WinEDA_DrawPanel* aPanel, wxDC* aDC,
int aDrawMode, const wxPoint& aOffset = ZeroOffset );
/** /**
* Function DrawHighLight * Function DrawHighLight

View File

@ -738,7 +738,7 @@ bool DIMENSION::HitTest( const wxPoint& ref_pos )
*/ */
bool DIMENSION::HitTest( EDA_Rect& refArea ) bool DIMENSION::HitTest( EDA_Rect& refArea )
{ {
if( refArea.Inside( m_Pos ) ) if( refArea.Contains( m_Pos ) )
return true; return true;
return false; return false;
} }

View File

@ -487,9 +487,9 @@ bool DRAWSEGMENT::HitTest( const wxPoint& ref_pos )
*/ */
bool DRAWSEGMENT::HitTest( EDA_Rect& refArea ) bool DRAWSEGMENT::HitTest( EDA_Rect& refArea )
{ {
if( refArea.Inside( m_Start ) ) if( refArea.Contains( m_Start ) )
return true; return true;
if( refArea.Inside( m_End ) ) if( refArea.Contains( m_End ) )
return true; return true;
return false; return false;
} }

View File

@ -200,7 +200,7 @@ bool MIREPCB::HitTest( const wxPoint& refPos )
*/ */
bool MIREPCB::HitTest( EDA_Rect& refArea ) bool MIREPCB::HitTest( EDA_Rect& refArea )
{ {
if( refArea.Inside( m_Pos ) ) if( refArea.Contains( m_Pos ) )
return true; return true;
return false; return false;
} }

Some files were not shown because too many files have changed in this diff Show More