Schematic component library object improvements and other minor fixes.

This commit is contained in:
Wayne Stambaugh 2010-10-25 11:43:42 -04:00
parent 9afa89261f
commit 6566b0c5fa
46 changed files with 442 additions and 552 deletions

View File

@ -4,6 +4,21 @@ 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-oct-25 UPDATE Wayne Stambaugh <stambaughw@verizon.net>
================================================================================
++EESchema
* Remove common library component and alias base class CMP_LIB_ENTRY.
* Derive LIB_COMPONENT and LIB_ALIAS directly from EDA_BaseStruct.
* Encapsulate most library draw item object members.
* Make most library draw item get methods constant.
* Merge two edit component properties methods into a single method.
* Update double click left mouse button to use merged edit component
properties method.
* Set schematic find dialog find button as default button.
++include
* Add in-line flag state helpers to EDA_BaseStruct.
2010-oct-22 UPDATE Wayne Stambaugh <stambaughw@verizon.net> 2010-oct-22 UPDATE Wayne Stambaugh <stambaughw@verizon.net>
================================================================================ ================================================================================
Component library editor bug fixes and other minor fixes. Component library editor bug fixes and other minor fixes.

View File

@ -932,9 +932,9 @@ static LIB_PIN* GetNextPinPosition( SCH_COMPONENT* aDrawLibItem,
wxASSERT( Pin->Type() == COMPONENT_PIN_DRAW_TYPE ); wxASSERT( Pin->Type() == COMPONENT_PIN_DRAW_TYPE );
/* Skip items not used for this part */ /* Skip items not used for this part */
if( Multi && Pin->m_Unit && ( Pin->m_Unit != Multi ) ) if( Multi && Pin->GetUnit() && ( Pin->GetUnit() != Multi ) )
continue; continue;
if( convert && Pin->m_Convert && ( Pin->m_Convert != convert ) ) if( convert && Pin->GetConvert() && ( Pin->GetConvert() != convert ) )
continue; continue;
/* Calculate the pin position (according to the component orientation) /* Calculate the pin position (according to the component orientation)

View File

@ -34,60 +34,47 @@
#define TRACE_DESTRUCTOR 0 #define TRACE_DESTRUCTOR 0
/** class CMP_LIB_ENTRY /*******************************/
* Base class to describe library components and aliases. /* class LIB_ALIAS */
* This class is not to be used directly. /*******************************/
* There are 2 derived classes
* class LIB_COMPONENT that describes a component in library /* Class to define an alias of a component
* class LIB_ALIAS that describes an alias of an existing component * An alias uses the component definition (graphic, pins...)
* a LIB_COMPONENT object handle all info to draw a component * but has its own name, keywords and documentation.
* (pins, graphic body items, fields, name, keywords and documentation) * Therefore, when the component is modified, alias of this component are
* a LIB_ALIAS object use info of its LIB_COMPONENT parent * modified.
* and has just a name, keywords and documentation * This is a simple method to create components with differs very few
* (like 74LS00, 74HC00 ... and many op amps )
*/ */
CMP_LIB_ENTRY::CMP_LIB_ENTRY( LibrEntryType aType, const wxString& aName, LIB_ALIAS::LIB_ALIAS( const wxString& aName, LIB_COMPONENT* aRootComponent ):
CMP_LIBRARY* aLibrary ) : EDA_BaseStruct( LIB_ALIAS_T )
EDA_BaseStruct( LIBCOMPONENT_STRUCT_TYPE )
{ {
type = aType; root = aRootComponent;
name = aName; name = aName;
library = aLibrary;
} }
CMP_LIB_ENTRY::CMP_LIB_ENTRY( CMP_LIB_ENTRY& aEntry, CMP_LIBRARY* aLibrary ) : LIB_ALIAS::LIB_ALIAS( const LIB_ALIAS& aAlias, LIB_COMPONENT* aRootComponent ) :
EDA_BaseStruct( aEntry ) EDA_BaseStruct( aAlias )
{ {
type = aEntry.type; name = aAlias.name;
name = aEntry.name; root = aRootComponent;
description = aEntry.description; description = aAlias.description;
keyWords = aEntry.keyWords; keyWords = aAlias.keyWords;
docFileName = aEntry.docFileName; docFileName = aAlias.docFileName;
library = aLibrary;
} }
CMP_LIB_ENTRY::~CMP_LIB_ENTRY() LIB_ALIAS::~LIB_ALIAS()
{ {
#if TRACE_DESTRUCTOR
wxLogDebug( wxT( "Destroying alias \"%s\" of component \"%s\" with alais list count %d." ),
GetChars( name ), GetChars( root->GetName() ), root->m_aliases.size() );
#endif
} }
wxString CMP_LIB_ENTRY::GetLibraryName()
{
if( library != NULL )
return library->GetName();
return wxString( _( "none" ) );
}
wxString LIB_COMPONENT::GetLibraryName()
{
if( library != NULL )
return library->GetName();
return wxString( _( "none" ) );
}
wxString LIB_ALIAS::GetLibraryName() wxString LIB_ALIAS::GetLibraryName()
{ {
if( GetComponent() ) if( GetComponent() )
@ -96,6 +83,13 @@ wxString LIB_ALIAS::GetLibraryName()
return wxString( _( "none" ) ); return wxString( _( "none" ) );
} }
bool LIB_ALIAS::IsRoot() const
{
return name.CmpNoCase( root->GetName() ) == 0;
}
/** /**
* Function SaveDoc * Function SaveDoc
* writes the doc info out to a FILE in "*.dcm" format. * writes the doc info out to a FILE in "*.dcm" format.
@ -104,7 +98,7 @@ wxString LIB_ALIAS::GetLibraryName()
* @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.
*/ */
bool CMP_LIB_ENTRY::SaveDoc( FILE* aFile ) bool LIB_ALIAS::SaveDoc( FILE* aFile )
{ {
if( description.IsEmpty() && keyWords.IsEmpty() && docFileName.IsEmpty() ) if( description.IsEmpty() && keyWords.IsEmpty() && docFileName.IsEmpty() )
return true; return true;
@ -131,59 +125,24 @@ bool CMP_LIB_ENTRY::SaveDoc( FILE* aFile )
} }
bool CMP_LIB_ENTRY::operator==( const wxChar* aName ) const bool LIB_ALIAS::operator==( const wxChar* aName ) const
{ {
return name.CmpNoCase( aName ) == 0; return name.CmpNoCase( aName ) == 0;
} }
bool operator<( const CMP_LIB_ENTRY& aItem1, const CMP_LIB_ENTRY& aItem2 ) bool operator<( const LIB_ALIAS& aItem1, const LIB_ALIAS& aItem2 )
{ {
return aItem1.GetName().CmpNoCase( aItem2.GetName() ) < 0; return aItem1.GetName().CmpNoCase( aItem2.GetName() ) < 0;
} }
int LibraryEntryCompare( const CMP_LIB_ENTRY* aItem1, const CMP_LIB_ENTRY* aItem2 ) int LibraryEntryCompare( const LIB_ALIAS* aItem1, const LIB_ALIAS* aItem2 )
{ {
return aItem1->GetName().CmpNoCase( aItem2->GetName() ); return aItem1->GetName().CmpNoCase( aItem2->GetName() );
} }
/*******************************/
/* class LIB_ALIAS */
/*******************************/
/* Class to define an alias of a component
* An alias uses the component definition (graphic, pins...)
* but has its own name, keywords and documentation.
* Therefore, when the component is modified, alias of this component are
* modified.
* This is a simple method to create components with differs very few
* (like 74LS00, 74HC00 ... and many op amps )
*/
LIB_ALIAS::LIB_ALIAS( const wxString& aName, LIB_COMPONENT* aRootComponent ) :
CMP_LIB_ENTRY( ALIAS, aName, NULL )
{
root = aRootComponent;
}
LIB_ALIAS::LIB_ALIAS( LIB_ALIAS& aAlias, LIB_COMPONENT* aRootComponent ) : CMP_LIB_ENTRY( aAlias )
{
root = aRootComponent;
}
LIB_ALIAS::~LIB_ALIAS()
{
#if TRACE_DESTRUCTOR
wxLogDebug( wxT( "Destroying alias \"%s\" of component \"%s\" with alais list count %d." ),
GetChars( name ), GetChars( root->GetName() ), root->m_aliases.size() );
#endif
}
/***********************/ /***********************/
/* class LIB_COMPONENT */ /* class LIB_COMPONENT */
/***********************/ /***********************/
@ -196,10 +155,12 @@ LIB_ALIAS::~LIB_ALIAS()
* Library components are different from schematic components. * Library components are different from schematic components.
*/ */
LIB_COMPONENT::LIB_COMPONENT( const wxString& aName, CMP_LIBRARY* aLibrary ) : LIB_COMPONENT::LIB_COMPONENT( const wxString& aName, CMP_LIBRARY* aLibrary ) :
CMP_LIB_ENTRY( ROOT, aName, aLibrary ) EDA_BaseStruct( LIB_COMPONENT_T )
{ {
m_name = aName;
m_library = aLibrary;
m_dateModified = 0; m_dateModified = 0;
unitCount = 1; m_unitCount = 1;
m_pinNameOffset = 40; m_pinNameOffset = 40;
m_options = ENTRY_NORMAL; m_options = ENTRY_NORMAL;
m_unitsLocked = FALSE; m_unitsLocked = FALSE;
@ -223,12 +184,14 @@ LIB_COMPONENT::LIB_COMPONENT( const wxString& aName, CMP_LIBRARY* aLibrary ) :
LIB_COMPONENT::LIB_COMPONENT( LIB_COMPONENT& aComponent, CMP_LIBRARY* aLibrary ) : LIB_COMPONENT::LIB_COMPONENT( LIB_COMPONENT& aComponent, CMP_LIBRARY* aLibrary ) :
CMP_LIB_ENTRY( aComponent, aLibrary ) EDA_BaseStruct( aComponent )
{ {
LIB_DRAW_ITEM* newItem; LIB_DRAW_ITEM* newItem;
m_library = aLibrary;
m_name = aComponent.m_name;
m_FootprintList = aComponent.m_FootprintList; m_FootprintList = aComponent.m_FootprintList;
unitCount = aComponent.unitCount; m_unitCount = aComponent.m_unitCount;
m_unitsLocked = aComponent.m_unitsLocked; m_unitsLocked = aComponent.m_unitsLocked;
m_pinNameOffset = aComponent.m_pinNameOffset; m_pinNameOffset = aComponent.m_pinNameOffset;
m_showPinNumbers = aComponent.m_showPinNumbers; m_showPinNumbers = aComponent.m_showPinNumbers;
@ -277,6 +240,15 @@ LIB_COMPONENT::~LIB_COMPONENT()
} }
wxString LIB_COMPONENT::GetLibraryName()
{
if( m_library != NULL )
return m_library->GetName();
return wxString( _( "none" ) );
}
/** function IsMulti /** function IsMulti
* @return the sub reference for component having multiple parts per package. * @return the sub reference for component having multiple parts per package.
* The sub reference identify the part (or unit) * The sub reference identify the part (or unit)
@ -296,7 +268,7 @@ wxString LIB_COMPONENT::ReturnSubReference( int aUnit )
void LIB_COMPONENT::SetName( const wxString& aName ) void LIB_COMPONENT::SetName( const wxString& aName )
{ {
CMP_LIB_ENTRY::SetName( aName ); m_name = aName;
GetValueField().m_Text = aName; GetValueField().m_Text = aName;
m_aliases[0]->SetName( aName ); m_aliases[0]->SetName( aName );
} }
@ -600,7 +572,7 @@ bool LIB_COMPONENT::Save( FILE* aFile )
0, m_pinNameOffset, 0, m_pinNameOffset,
m_showPinNumbers ? 'Y' : 'N', m_showPinNumbers ? 'Y' : 'N',
m_showPinNames ? 'Y' : 'N', m_showPinNames ? 'Y' : 'N',
unitCount, m_unitsLocked ? 'L' : 'F', m_unitCount, m_unitsLocked ? 'L' : 'F',
m_options == ENTRY_POWER ? 'P' : 'N' ) < 0 ) m_options == ENTRY_POWER ? 'P' : 'N' ) < 0 )
return false; return false;
@ -735,8 +707,8 @@ bool LIB_COMPONENT::Load( FILE* aFile, char* aLine, int* aLineNum, wxString& aEr
|| sscanf( p, "%c", &drawnum ) != 1 || sscanf( p, "%c", &drawnum ) != 1
|| ( p = strtok( NULL, " \t\n" ) ) == NULL /* DrawNums: */ || ( p = strtok( NULL, " \t\n" ) ) == NULL /* DrawNums: */
|| sscanf( p, "%c", &drawname ) != 1 || sscanf( p, "%c", &drawname ) != 1
|| ( p = strtok( NULL, " \t\n" ) ) == NULL /* unitCount: */ || ( p = strtok( NULL, " \t\n" ) ) == NULL /* m_unitCount: */
|| sscanf( p, "%d", &unitCount ) != 1 ) || sscanf( p, "%d", &m_unitCount ) != 1 )
{ {
aErrorMsg.Printf( wxT( "Wrong DEF format in line %d, skipped." ), *aLineNum ); aErrorMsg.Printf( wxT( "Wrong DEF format in line %d, skipped." ), *aLineNum );
while( GetLine( aFile, aLine, aLineNum, LINE_BUFFER_LEN_LARGE ) ) while( GetLine( aFile, aLine, aLineNum, LINE_BUFFER_LEN_LARGE ) )
@ -749,9 +721,9 @@ bool LIB_COMPONENT::Load( FILE* aFile, char* aLine, int* aLineNum, wxString& aEr
return false; return false;
} }
// Ensure unitCount is >= 1 (could be read as 0 in old libraries) // Ensure m_unitCount is >= 1 (could be read as 0 in old libraries)
if( unitCount < 1 ) if( m_unitCount < 1 )
unitCount = 1; m_unitCount = 1;
m_showPinNumbers = ( drawnum == 'N' ) ? false : true; m_showPinNumbers = ( drawnum == 'N' ) ? false : true;
m_showPinNames = ( drawname == 'N' ) ? false : true; m_showPinNames = ( drawname == 'N' ) ? false : true;
@ -762,16 +734,16 @@ bool LIB_COMPONENT::Load( FILE* aFile, char* aLine, int* aLineNum, wxString& aEr
strupper( componentName ); strupper( componentName );
if( componentName[0] != '~' ) if( componentName[0] != '~' )
{ {
name = value.m_Text = CONV_FROM_UTF8( componentName ); m_name = value.m_Text = CONV_FROM_UTF8( componentName );
} }
else else
{ {
name = value.m_Text = CONV_FROM_UTF8( &componentName[1] ); m_name = value.m_Text = CONV_FROM_UTF8( &componentName[1] );
value.m_Attributs |= TEXT_NO_VISIBLE; value.m_Attributs |= TEXT_NO_VISIBLE;
} }
// Add the root alias to the alias list. // Add the root alias to the alias list.
m_aliases.push_back( new LIB_ALIAS( name, this ) ); m_aliases.push_back( new LIB_ALIAS( m_name, this ) );
LIB_FIELD& reference = GetReferenceField(); LIB_FIELD& reference = GetReferenceField();
@ -952,7 +924,7 @@ bool LIB_COMPONENT::LoadField( char* aLine, wxString& aErrorMsg )
*fixedField = *field; *fixedField = *field;
if( field->m_FieldId == VALUE ) if( field->m_FieldId == VALUE )
name = field->m_Text; m_name = field->m_Text;
SAFE_DELETE( field ); SAFE_DELETE( field );
} }
@ -1000,7 +972,7 @@ EDA_Rect LIB_COMPONENT::GetBoundaryBox( int aUnit, int aConvert )
BOOST_FOREACH( LIB_DRAW_ITEM& item, drawings ) BOOST_FOREACH( LIB_DRAW_ITEM& item, drawings )
{ {
if( ( item.m_Unit > 0 ) && ( ( unitCount > 1 ) && ( aUnit > 0 ) if( ( item.m_Unit > 0 ) && ( ( m_unitCount > 1 ) && ( aUnit > 0 )
&& ( aUnit != item.m_Unit ) ) ) && ( aUnit != item.m_Unit ) ) )
continue; continue;
@ -1422,10 +1394,10 @@ LIB_DRAW_ITEM* LIB_COMPONENT::LocateDrawItem( int aUnit, int aConvert, KICAD_T a
void LIB_COMPONENT::SetPartCount( int aCount ) void LIB_COMPONENT::SetPartCount( int aCount )
{ {
if( unitCount == aCount ) if( m_unitCount == aCount )
return; return;
if( aCount < unitCount ) if( aCount < m_unitCount )
{ {
LIB_DRAW_ITEM_LIST::iterator i; LIB_DRAW_ITEM_LIST::iterator i;
i = drawings.begin(); i = drawings.begin();
@ -1440,7 +1412,7 @@ void LIB_COMPONENT::SetPartCount( int aCount )
} }
else else
{ {
int prevCount = unitCount; int prevCount = m_unitCount;
// We cannot use an iterator here, because when adding items in vector // We cannot use an iterator here, because when adding items in vector
// the buffer can be reallocated, that change the previous value of // the buffer can be reallocated, that change the previous value of
@ -1462,7 +1434,7 @@ void LIB_COMPONENT::SetPartCount( int aCount )
drawings.sort(); drawings.sort();
} }
unitCount = aCount; m_unitCount = aCount;
} }
@ -1540,7 +1512,7 @@ bool LIB_COMPONENT::HasAlias( const wxString& aName ) const
void LIB_COMPONENT::SetAliases( const wxArrayString& aAliasList ) void LIB_COMPONENT::SetAliases( const wxArrayString& aAliasList )
{ {
wxCHECK_RET( library == NULL, wxCHECK_RET( m_library == NULL,
wxT( "Component aliases cannot be changed when they are owned by a library." ) ); wxT( "Component aliases cannot be changed when they are owned by a library." ) );
if( aAliasList == GetAliasNames() ) if( aAliasList == GetAliasNames() )
@ -1572,7 +1544,7 @@ void LIB_COMPONENT::SetAliases( const wxArrayString& aAliasList )
void LIB_COMPONENT::RemoveAlias( const wxString& aName ) void LIB_COMPONENT::RemoveAlias( const wxString& aName )
{ {
wxCHECK_RET( library == NULL, wxCHECK_RET( m_library == NULL,
wxT( "Component aliases cannot be changed when they are owned by a library." ) ); wxT( "Component aliases cannot be changed when they are owned by a library." ) );
wxCHECK_RET( !aName.IsEmpty(), wxT( "Cannot get alias with an empty name." ) ); wxCHECK_RET( !aName.IsEmpty(), wxT( "Cannot get alias with an empty name." ) );

View File

@ -13,6 +13,7 @@
class CMP_LIBRARY; class CMP_LIBRARY;
class LIB_ALIAS; class LIB_ALIAS;
class LIB_COMPONENT;
class LIB_FIELD; class LIB_FIELD;
@ -32,15 +33,6 @@ typedef std::map< wxString, LIB_ALIAS*, AliasMapSort > LIB_ALIAS_MAP;
typedef std::vector< LIB_ALIAS* > LIB_ALIAS_LIST; typedef std::vector< LIB_ALIAS* > LIB_ALIAS_LIST;
/* Types for components in libraries
* components can be a true component or an alias of a true component.
*/
enum LibrEntryType
{
ROOT, /* This is a true component standard LIB_COMPONENT */
ALIAS /* This is an alias of a true component */
};
/* values for member .m_options */ /* values for member .m_options */
enum LibrEntryOptions enum LibrEntryOptions
{ {
@ -50,51 +42,60 @@ enum LibrEntryOptions
/** /**
* Class CMP_LIB_ENTRY * Component library alias object definition.
* is a base class to describe library components and aliases.
* *
* This class is not to be used directly. * Component aliases are not really components. They are references
* to an actual component object.
*/ */
class CMP_LIB_ENTRY : public EDA_BaseStruct class LIB_ALIAS : public EDA_BaseStruct
{ {
/**
* The actual component of the alias.
*
* @note - Do not delete the root component. The root component is actually shared by
* all of the aliases associated with it. The component pointer will be delete
* in the destructor of the last alias that shares this component is deleted.
* Deleting the root component will likely cause EESchema to crash.
*/
LIB_COMPONENT* root;
friend class LIB_COMPONENT;
protected: protected:
wxString name; wxString name;
/// Library object that entry is attached to.
CMP_LIBRARY* library;
/// Entry type, either ROOT or ALIAS.
LibrEntryType type;
wxString description; ///< documentation for info wxString description; ///< documentation for info
wxString keyWords; ///< keyword list (used for search for components by keyword) wxString keyWords; ///< keyword list (used for search for components by keyword)
wxString docFileName; ///< Associate doc file name wxString docFileName; ///< Associate doc file name
public: public:
CMP_LIB_ENTRY( LibrEntryType aType, const wxString& aName, CMP_LIBRARY* aLibrary = NULL ); LIB_ALIAS( const wxString& aName, LIB_COMPONENT* aRootComponent );
CMP_LIB_ENTRY( CMP_LIB_ENTRY& aEntry, CMP_LIBRARY* aLibrary = NULL ); LIB_ALIAS( const LIB_ALIAS& aAlias, LIB_COMPONENT* aRootComponent = NULL );
virtual ~CMP_LIB_ENTRY(); virtual ~LIB_ALIAS();
virtual wxString GetClass() const virtual wxString GetClass() const
{ {
return wxT( "CMP_LIB_ENTRY" ); return wxT( "LIB_ALIAS" );
}
/**
* Get the alias root component.
*/
LIB_COMPONENT* GetComponent() const
{
return root;
} }
virtual wxString GetLibraryName(); virtual wxString GetLibraryName();
CMP_LIBRARY* GetLibrary() { return library; } bool IsRoot() const;
CMP_LIBRARY* GetLibrary();
virtual const wxString& GetName() const { return name; } virtual const wxString& GetName() const { return name; }
virtual void SetName( const wxString& aName ) { name = aName; } virtual void SetName( const wxString& aName ) { name = aName; }
bool isComponent() const { return type == ROOT; }
bool isAlias() const { return type == ALIAS; }
int GetType() const { return type; }
void SetDescription( const wxString& aDescription ) void SetDescription( const wxString& aDescription )
{ {
description = aDescription; description = aDescription;
@ -133,12 +134,12 @@ public:
return !( *this == aName ); return !( *this == aName );
} }
bool operator==( const wxString& aName ) const { return *this == ( const wxChar* ) aName; } bool operator==( const LIB_ALIAS* aAlias ) const { return this == aAlias; }
}; };
extern bool operator<( const CMP_LIB_ENTRY& aItem1, const CMP_LIB_ENTRY& aItem2 ); extern bool operator<( const LIB_ALIAS& aItem1, const LIB_ALIAS& aItem2 );
extern int LibraryEntryCompare( const CMP_LIB_ENTRY* aItem1, const CMP_LIB_ENTRY* aItem2 ); extern int LibraryEntryCompare( const LIB_ALIAS* aItem1, const LIB_ALIAS* aItem2 );
/** /**
@ -147,8 +148,9 @@ extern int LibraryEntryCompare( const CMP_LIB_ENTRY* aItem1, const CMP_LIB_ENTRY
* A library component object is typically saved and loaded in a component library file (.lib). * A library component object is typically saved and loaded in a component library file (.lib).
* Library components are different from schematic components. * Library components are different from schematic components.
*/ */
class LIB_COMPONENT : public CMP_LIB_ENTRY class LIB_COMPONENT : public EDA_BaseStruct
{ {
wxString m_name;
int m_pinNameOffset; ///< The offset in mils to draw the pin name. Set to 0 int m_pinNameOffset; ///< The offset in mils to draw the pin name. Set to 0
///< to draw the pin name above the pin. ///< to draw the pin name above the pin.
bool m_unitsLocked; ///< True if component has multiple parts and changing bool m_unitsLocked; ///< True if component has multiple parts and changing
@ -157,12 +159,13 @@ class LIB_COMPONENT : public CMP_LIB_ENTRY
bool m_showPinNumbers; ///< Determines if component pin numbers are visible. bool m_showPinNumbers; ///< Determines if component pin numbers are visible.
long m_dateModified; ///< Date the component was last modified. long m_dateModified; ///< Date the component was last modified.
LibrEntryOptions m_options; ///< Special component features such as POWER or NORMAL.) LibrEntryOptions m_options; ///< Special component features such as POWER or NORMAL.)
int unitCount; ///< Number of units (parts) per package. int m_unitCount; ///< Number of units (parts) per package.
LIB_DRAW_ITEM_LIST drawings; ///< How to draw this part. LIB_DRAW_ITEM_LIST drawings; ///< How to draw this part.
wxArrayString m_FootprintList; /**< List of suitable footprint names for the wxArrayString m_FootprintList; /**< List of suitable footprint names for the
component (wild card names accepted). */ component (wild card names accepted). */
LIB_ALIAS_LIST m_aliases; ///< List of alias object pointers associated with the LIB_ALIAS_LIST m_aliases; ///< List of alias object pointers associated with the
///< component. ///< component.
CMP_LIBRARY* m_library; ///< Library the component belongs to if any.
void deleteAllFields(); void deleteAllFields();
@ -183,7 +186,11 @@ public:
virtual void SetName( const wxString& aName ); virtual void SetName( const wxString& aName );
virtual wxString GetLibraryName(); wxString GetName() { return m_name; }
wxString GetLibraryName();
CMP_LIBRARY* GetLibrary() { return m_library; }
wxArrayString GetAliasNames( bool aIncludeRoot = true ) const; wxArrayString GetAliasNames( bool aIncludeRoot = true ) const;
@ -512,13 +519,13 @@ public:
*/ */
void SetPartCount( int count ); void SetPartCount( int count );
int GetPartCount() { return unitCount; } int GetPartCount() { return m_unitCount; }
/** function IsMulti /** function IsMulti
* @return true if the component has multiple parts per package. * @return true if the component has multiple parts per package.
* When happens, the reference has a sub reference ti identify part * When happens, the reference has a sub reference ti identify part
*/ */
bool IsMulti() { return unitCount > 1; } bool IsMulti() { return m_unitCount > 1; }
/** function IsMulti /** function IsMulti
* @return the sub reference for component having multiple parts per package. * @return the sub reference for component having multiple parts per package.
@ -574,52 +581,4 @@ public:
}; };
/**
* Component library alias object definition.
*
* Component aliases are not really components. They are references
* to an actual component object.
*/
class LIB_ALIAS : public CMP_LIB_ENTRY
{
friend class LIB_COMPONENT;
protected:
/**
* The actual component of the alias.
*
* @note - Do not delete the root component. The root component is actually shared by
* all of the aliases associated with it. The component pointer will be delete
* in the destructor of the last alias that shares this component is deleted.
* Deleting the root component will likely cause EESchema to crash.
*/
LIB_COMPONENT* root;
public:
LIB_ALIAS( const wxString& aName, LIB_COMPONENT* aRootComponent );
LIB_ALIAS( LIB_ALIAS& aAlias, LIB_COMPONENT* aRootComponent = NULL );
virtual ~LIB_ALIAS();
virtual wxString GetClass() const
{
return wxT( "LIB_ALIAS" );
}
/**
* Get the alias root component.
*/
LIB_COMPONENT* GetComponent() const
{
return root;
}
virtual wxString GetLibraryName();
bool IsRoot() const { return name.CmpNoCase( root->GetName() ) == 0; }
bool operator==( const LIB_ALIAS* aAlias ) const { return this == aAlias; }
};
#endif // CLASS_LIBENTRY_H #endif // CLASS_LIBENTRY_H

View File

@ -174,13 +174,13 @@ bool CMP_LIBRARY::Conflicts( LIB_COMPONENT* aComponent )
} }
CMP_LIB_ENTRY* CMP_LIBRARY::FindEntry( const wxChar* aName ) LIB_ALIAS* CMP_LIBRARY::FindEntry( const wxChar* aName )
{ {
LIB_ALIAS_MAP::iterator it = aliases.find( wxString( aName ) ); LIB_ALIAS_MAP::iterator it = aliases.find( wxString( aName ) );
if( it != aliases.end() ) if( it != aliases.end() )
return ( CMP_LIB_ENTRY* ) (*it).second; return (*it).second;
return NULL; return NULL;
} }
@ -190,10 +190,10 @@ CMP_LIB_ENTRY* CMP_LIBRARY::FindEntry( const wxChar* aName )
* Return the first entry in the library. * Return the first entry in the library.
* @return The first entry or NULL if the library has no entries. * @return The first entry or NULL if the library has no entries.
*/ */
CMP_LIB_ENTRY* CMP_LIBRARY::GetFirstEntry() LIB_ALIAS* CMP_LIBRARY::GetFirstEntry()
{ {
if( aliases.size() ) if( aliases.size() )
return ( LIB_ALIAS* ) (*aliases.begin()).second; return (*aliases.begin()).second;
else else
return NULL; return NULL;
} }
@ -201,16 +201,10 @@ CMP_LIB_ENTRY* CMP_LIBRARY::GetFirstEntry()
LIB_COMPONENT* CMP_LIBRARY::FindComponent( const wxChar* aName ) LIB_COMPONENT* CMP_LIBRARY::FindComponent( const wxChar* aName )
{ {
LIB_COMPONENT* component = NULL; LIB_COMPONENT* component = NULL;
CMP_LIB_ENTRY* entry = FindEntry( aName ); LIB_ALIAS* entry = FindEntry( aName );
if( entry != NULL ) if( entry != NULL )
{ component = entry->GetComponent();
wxCHECK_MSG( entry->isAlias(), NULL,
wxT( "Component found in library entry list, bad programmer!" ) );
LIB_ALIAS* alias = (LIB_ALIAS*) entry;
component = alias->GetComponent();
}
return component; return component;
} }
@ -276,7 +270,7 @@ LIB_COMPONENT* CMP_LIBRARY::AddComponent( LIB_COMPONENT* aComponent )
LIB_ALIAS* alias = FindAlias( aliasname ); LIB_ALIAS* alias = FindAlias( aliasname );
if( alias != NULL ) if( alias != NULL )
RemoveEntry( (CMP_LIB_ENTRY*) alias ); RemoveEntry( alias );
aliases[ aliasname ] = newCmp->m_aliases[i]; aliases[ aliasname ] = newCmp->m_aliases[i];
} }
@ -287,10 +281,9 @@ LIB_COMPONENT* CMP_LIBRARY::AddComponent( LIB_COMPONENT* aComponent )
} }
CMP_LIB_ENTRY* CMP_LIBRARY::RemoveEntry( CMP_LIB_ENTRY* aEntry ) LIB_ALIAS* CMP_LIBRARY::RemoveEntry( LIB_ALIAS* aEntry )
{ {
wxCHECK_MSG( aEntry != NULL && aEntry->isAlias(), NULL, wxCHECK_MSG( aEntry != NULL, NULL, wxT( "NULL pointer cannot be removed from library." ) );
wxT( "Only LIB_ALIAS pointers can be removed from library." ) );
LIB_ALIAS_MAP::iterator it = aliases.find( aEntry->GetName() ); LIB_ALIAS_MAP::iterator it = aliases.find( aEntry->GetName() );
@ -326,7 +319,7 @@ CMP_LIB_ENTRY* CMP_LIBRARY::RemoveEntry( CMP_LIB_ENTRY* aEntry )
aliases.erase( it ); aliases.erase( it );
isModified = true; isModified = true;
return (CMP_LIB_ENTRY*) alias; return alias;
} }
@ -354,7 +347,7 @@ LIB_COMPONENT* CMP_LIBRARY::ReplaceComponent( LIB_COMPONENT* aOldComponent,
while( i != 0 ) while( i != 0 )
{ {
i -= 1; i -= 1;
RemoveEntry( (CMP_LIB_ENTRY*) aOldComponent->m_aliases[ i ] ); RemoveEntry( aOldComponent->m_aliases[ i ] );
} }
LIB_COMPONENT* newCmp = new LIB_COMPONENT( *aNewComponent, this ); LIB_COMPONENT* newCmp = new LIB_COMPONENT( *aNewComponent, this );
@ -371,7 +364,7 @@ LIB_COMPONENT* CMP_LIBRARY::ReplaceComponent( LIB_COMPONENT* aOldComponent,
} }
CMP_LIB_ENTRY* CMP_LIBRARY::GetNextEntry( const wxChar* aName ) LIB_ALIAS* CMP_LIBRARY::GetNextEntry( const wxChar* aName )
{ {
if( aliases.empty() ) if( aliases.empty() )
return NULL; return NULL;
@ -383,11 +376,11 @@ CMP_LIB_ENTRY* CMP_LIBRARY::GetNextEntry( const wxChar* aName )
if( it == aliases.end() ) if( it == aliases.end() )
it = aliases.begin(); it = aliases.begin();
return ( CMP_LIB_ENTRY* ) (*it).second; return (*it).second;
} }
CMP_LIB_ENTRY* CMP_LIBRARY::GetPreviousEntry( const wxChar* aName ) LIB_ALIAS* CMP_LIBRARY::GetPreviousEntry( const wxChar* aName )
{ {
if( aliases.empty() ) if( aliases.empty() )
return NULL; return NULL;
@ -399,7 +392,7 @@ CMP_LIB_ENTRY* CMP_LIBRARY::GetPreviousEntry( const wxChar* aName )
it--; it--;
return ( CMP_LIB_ENTRY* ) (*it).second; return (*it).second;
} }
@ -551,7 +544,7 @@ the current schematic." ),
void CMP_LIBRARY::LoadAliases( LIB_COMPONENT* component ) void CMP_LIBRARY::LoadAliases( LIB_COMPONENT* component )
{ {
wxCHECK_RET( component != NULL && component->isComponent(), wxCHECK_RET( component != NULL,
wxT( "Cannot load aliases of NULL component object. Bad programmer!" ) ); wxT( "Cannot load aliases of NULL component object. Bad programmer!" ) );
for( size_t i = 0; i < component->m_aliases.size(); i++ ) for( size_t i = 0; i < component->m_aliases.size(); i++ )
@ -591,7 +584,7 @@ bool CMP_LIBRARY::LoadDocs( wxString& aErrorMsg )
{ {
int lineNumber = 0; int lineNumber = 0;
char line[LINE_BUFFER_LEN_LARGE], * name, * text; char line[LINE_BUFFER_LEN_LARGE], * name, * text;
CMP_LIB_ENTRY* entry; LIB_ALIAS* entry;
FILE* file; FILE* file;
wxString msg; wxString msg;
wxFileName fn = fileName; wxFileName fn = fileName;
@ -647,8 +640,6 @@ bool CMP_LIBRARY::LoadDocs( wxString& aErrorMsg )
if( entry ) if( entry )
{ {
wxASSERT( entry->isAlias() );
switch( line[0] ) switch( line[0] )
{ {
case 'D': case 'D':
@ -979,9 +970,9 @@ LIB_COMPONENT* CMP_LIBRARY::FindLibraryComponent( const wxString& aName,
} }
CMP_LIB_ENTRY* CMP_LIBRARY::FindLibraryEntry( const wxString& aName, const wxString& aLibraryName ) LIB_ALIAS* CMP_LIBRARY::FindLibraryEntry( const wxString& aName, const wxString& aLibraryName )
{ {
CMP_LIB_ENTRY* entry = NULL; LIB_ALIAS* entry = NULL;
BOOST_FOREACH( CMP_LIBRARY& lib, libraryList ) BOOST_FOREACH( CMP_LIBRARY& lib, libraryList )
{ {

View File

@ -71,7 +71,6 @@ class CMP_LIBRARY
static CMP_LIBRARY_LIST libraryList; static CMP_LIBRARY_LIST libraryList;
static wxArrayString libraryListSortOrder; static wxArrayString libraryListSortOrder;
friend class CMP_LIB_ENTRY;
friend class LIB_COMPONENT; friend class LIB_COMPONENT;
public: public:
@ -217,12 +216,12 @@ public:
* @param aName - Name of entry, case insensitive. * @param aName - Name of entry, case insensitive.
* @return Entry if found. NULL if not found. * @return Entry if found. NULL if not found.
*/ */
CMP_LIB_ENTRY* FindEntry( const wxChar* aName ); LIB_ALIAS* FindEntry( const wxChar* aName );
/** /**
* Find component by \a aName. * Find component by \a aName.
* *
* This is a helper for FindEntry so casting a CMP_LIB_ENTRY pointer to * This is a helper for FindEntry so casting a LIB_ALIAS pointer to
* a LIB_COMPONENT pointer is not required. * a LIB_COMPONENT pointer is not required.
* *
* @param aName - Name of component, case insensitive. * @param aName - Name of component, case insensitive.
@ -233,7 +232,7 @@ public:
/** /**
* Find alias by \a nName. * Find alias by \a nName.
* *
* This is a helper for FindEntry so casting a CMP_LIB_ENTRY pointer to * This is a helper for FindEntry so casting a LIB_ALIAS pointer to
* a LIB_ALIAS pointer is not required. * a LIB_ALIAS pointer is not required.
* *
* @param aName - Name of alias, case insensitive. * @param aName - Name of alias, case insensitive.
@ -280,7 +279,7 @@ public:
* @param aEntry - Entry to remove from library. * @param aEntry - Entry to remove from library.
* @return The next entry in the library or NULL if the library is empty. * @return The next entry in the library or NULL if the library is empty.
*/ */
CMP_LIB_ENTRY* RemoveEntry( CMP_LIB_ENTRY* aEntry ); LIB_ALIAS* RemoveEntry( LIB_ALIAS* aEntry );
/** /**
* Replace an existing component entry in the library. * Replace an existing component entry in the library.
@ -297,7 +296,7 @@ public:
* *
* @return The first entry or NULL if the library has no entries. * @return The first entry or NULL if the library has no entries.
*/ */
CMP_LIB_ENTRY* GetFirstEntry(); LIB_ALIAS* GetFirstEntry();
/** /**
* Find next library entry by \a aName. * Find next library entry by \a aName.
@ -308,7 +307,7 @@ public:
* @param aName - Name of current entry. * @param aName - Name of current entry.
* @return Next entry if entry name is found. Otherwise NULL. * @return Next entry if entry name is found. Otherwise NULL.
*/ */
CMP_LIB_ENTRY* GetNextEntry( const wxChar* aName ); LIB_ALIAS* GetNextEntry( const wxChar* aName );
/** /**
@ -320,7 +319,7 @@ public:
* @param aName - Name of current entry. * @param aName - Name of current entry.
* @return Previous entry if entry name is found, otherwise NULL. * @return Previous entry if entry name is found, otherwise NULL.
*/ */
CMP_LIB_ENTRY* GetPreviousEntry( const wxChar* aName ); LIB_ALIAS* GetPreviousEntry( const wxChar* aName );
/** /**
* Return the file name without path or extension. * Return the file name without path or extension.
@ -471,7 +470,7 @@ public:
* @param aLibraryName - Name of the library to search. * @param aLibraryName - Name of the library to search.
* @return The entry object if found, otherwise NULL. * @return The entry object if found, otherwise NULL.
*/ */
static CMP_LIB_ENTRY* FindLibraryEntry( const wxString& aEntryName, static LIB_ALIAS* FindLibraryEntry( const wxString& aEntryName,
const wxString& aLibraryName = wxEmptyString ); const wxString& aLibraryName = wxEmptyString );
/** /**

View File

@ -43,8 +43,8 @@ void CreateDummyCmp()
LIB_RECTANGLE* Square = new LIB_RECTANGLE( DummyCmp ); LIB_RECTANGLE* Square = new LIB_RECTANGLE( DummyCmp );
Square->m_Pos = wxPoint( -200, 200 ); Square->Move( wxPoint( -200, 200 ) );
Square->m_End = wxPoint( 200, -200 ); Square->SetEndPosition( wxPoint( 200, -200 ) );
LIB_TEXT* Text = new LIB_TEXT( DummyCmp ); LIB_TEXT* Text = new LIB_TEXT( DummyCmp );
@ -537,8 +537,6 @@ LIB_PIN* SCH_COMPONENT::GetPin( const wxString& number )
if( Entry == NULL ) if( Entry == NULL )
return NULL; return NULL;
wxASSERT( Entry->isComponent() );
return Entry->GetPin( number, m_Multi, m_Convert ); return Entry->GetPin( number, m_Multi, m_Convert );
} }
@ -1127,10 +1125,10 @@ void SCH_COMPONENT::DisplayInfo( WinEDA_DrawFrame* frame )
{ {
// search for the component in lib // search for the component in lib
// Entry and root_component can differ if Entry is an alias // Entry and root_component can differ if Entry is an alias
CMP_LIB_ENTRY* Entry = CMP_LIBRARY::FindLibraryEntry( m_ChipName ); LIB_ALIAS* alias = CMP_LIBRARY::FindLibraryEntry( m_ChipName );
LIB_COMPONENT* root_component = CMP_LIBRARY::FindLibraryComponent( m_ChipName ); LIB_COMPONENT* root_component = CMP_LIBRARY::FindLibraryComponent( m_ChipName );
if( (Entry == NULL) || (root_component == NULL) ) if( (alias == NULL) || (root_component == NULL) )
return; return;
wxString msg; wxString msg;
@ -1149,13 +1147,13 @@ void SCH_COMPONENT::DisplayInfo( WinEDA_DrawFrame* frame )
// Display component reference in library and library // Display component reference in library and library
frame->AppendMsgPanel( _( "Component" ), m_ChipName, BROWN ); frame->AppendMsgPanel( _( "Component" ), m_ChipName, BROWN );
if( Entry->isAlias() ) if( alias->GetName() != root_component->GetName() )
frame->AppendMsgPanel( _( "Alias of" ), root_component->GetName(), BROWN ); frame->AppendMsgPanel( _( "Alias of" ), root_component->GetName(), BROWN );
frame->AppendMsgPanel( _( "Library" ), Entry->GetLibraryName(), BROWN ); frame->AppendMsgPanel( _( "Library" ), alias->GetLibraryName(), BROWN );
// Display description of the component, and keywords found in lib // Display description of the component, and keywords found in lib
frame->AppendMsgPanel( _( "Description" ), Entry->GetDescription(), DARKCYAN ); frame->AppendMsgPanel( _( "Description" ), alias->GetDescription(), DARKCYAN );
frame->AppendMsgPanel( _( "Key words" ), Entry->GetKeyWords(), DARKCYAN ); frame->AppendMsgPanel( _( "Key words" ), alias->GetKeyWords(), DARKCYAN );
} }

View File

@ -346,12 +346,11 @@ void RebuildEndPointsList( std::vector <DANGLING_END_ITEM>& aItemList, SCH_ITEM*
{ {
wxASSERT( Pin->Type() == COMPONENT_PIN_DRAW_TYPE ); wxASSERT( Pin->Type() == COMPONENT_PIN_DRAW_TYPE );
if( Pin->m_Unit && STRUCT->m_Multi if( Pin->GetUnit() && STRUCT->m_Multi && ( STRUCT->m_Multi != Pin->GetUnit() ) )
&& ( STRUCT->m_Multi != Pin->m_Unit ) )
continue; continue;
if( Pin->m_Convert && STRUCT->m_Convert if( Pin->GetConvert() && STRUCT->m_Convert
&& ( STRUCT->m_Convert != Pin->m_Convert ) ) && ( STRUCT->m_Convert != Pin->GetConvert() ) )
continue; continue;
DANGLING_END_ITEM item( PIN_END, Pin ); DANGLING_END_ITEM item( PIN_END, Pin );

View File

@ -76,7 +76,7 @@ wxString DataBaseGetName( WinEDA_DrawFrame* frame, wxString& Keys,
void DisplayCmpDoc( wxString& Name ) void DisplayCmpDoc( wxString& Name )
{ {
CMP_LIB_ENTRY* CmpEntry = NULL; LIB_ALIAS* CmpEntry = NULL;
CmpEntry = CMP_LIBRARY::FindLibraryEntry( Name ); CmpEntry = CMP_LIBRARY::FindLibraryEntry( Name );

View File

@ -154,5 +154,5 @@ void DIALOG_EDIT_COMPONENT_IN_LIBRARY::InitBasicPanel()
m_SelNumberOfUnits->SetValue( component->GetPartCount() ); m_SelNumberOfUnits->SetValue( component->GetPartCount() );
m_SetSkew->SetValue( component->GetPinNameOffset() ); m_SetSkew->SetValue( component->GetPinNameOffset() );
m_OptionPower->SetValue( component->IsPower() ); m_OptionPower->SetValue( component->IsPower() );
m_OptionPartsLocked->SetValue( component->UnitsLocked() ); m_OptionPartsLocked->SetValue( component->UnitsLocked() && component->GetPartCount() > 1 );
} }

View File

@ -35,8 +35,8 @@ DIALOG_SCH_FIND::DIALOG_SCH_FIND( wxWindow* aParent, wxFindReplaceData* aData,
m_checkWrap->SetValue( flags & FR_SEARCH_WRAP ); m_checkWrap->SetValue( flags & FR_SEARCH_WRAP );
m_checkCurrentSheetOnly->SetValue( flags & FR_CURRENT_SHEET_ONLY ); m_checkCurrentSheetOnly->SetValue( flags & FR_CURRENT_SHEET_ONLY );
m_buttonFind->SetDefault();
m_comboFind->SetFocus(); m_comboFind->SetFocus();
SetPosition( aPosition ); SetPosition( aPosition );
SetSize( aSize ); SetSize( aSize );
} }

View File

@ -33,35 +33,27 @@
void WinEDA_LibeditFrame::OnEditComponentProperties( wxCommandEvent& event ) void WinEDA_LibeditFrame::OnEditComponentProperties( wxCommandEvent& event )
{ {
bool partLocked = GetComponent()->UnitsLocked(); bool partLocked = GetComponent()->UnitsLocked();
EditComponentProperties();
if( partLocked != GetComponent()->UnitsLocked() )
{ // g_EditPinByPinIsOn is set to the better value,
// if m_UnitSelectionLocked has changed
g_EditPinByPinIsOn = GetComponent()->UnitsLocked() ? true : false;
m_HToolBar->ToggleTool( ID_LIBEDIT_EDIT_PIN_BY_PIN, g_EditPinByPinIsOn );
}
m_HToolBar->Refresh();
DrawPanel->Refresh();
}
void WinEDA_LibeditFrame::EditComponentProperties()
{
DIALOG_EDIT_COMPONENT_IN_LIBRARY dlg( this ); DIALOG_EDIT_COMPONENT_IN_LIBRARY dlg( this );
if( dlg.ShowModal() == wxID_CANCEL ) if( dlg.ShowModal() == wxID_CANCEL )
return; return;
if( partLocked != GetComponent()->UnitsLocked() )
{
// g_EditPinByPinIsOn is set to the better value, if m_UnitSelectionLocked has changed
g_EditPinByPinIsOn = GetComponent()->UnitsLocked() ? true : false;
}
UpdateAliasSelectList(); UpdateAliasSelectList();
UpdatePartSelectList(); UpdatePartSelectList();
DisplayLibInfos(); DisplayLibInfos();
DisplayCmpDoc(); DisplayCmpDoc();
OnModify( ); OnModify();
DrawPanel->Refresh();
} }
void DIALOG_EDIT_COMPONENT_IN_LIBRARY::OnOkClick( wxCommandEvent& event ) void DIALOG_EDIT_COMPONENT_IN_LIBRARY::OnOkClick( wxCommandEvent& event )
{ {
@ -144,14 +136,23 @@ 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& WXUNUSED (event) )
{ {
if( m_Parent == NULL )
return;
LIB_ALIAS* alias;
LIB_COMPONENT* component = m_Parent->GetComponent(); LIB_COMPONENT* component = m_Parent->GetComponent();
if( component == NULL ) if( component == NULL )
return; return;
m_DocCtrl->SetValue( component->GetDescription() ); alias = component->GetAlias( m_Parent->GetAliasName() );
m_DocfileCtrl->SetValue( component->GetDocFileName() );
m_KeywordsCtrl->SetValue( component->GetKeyWords() ); if( alias == NULL )
return;
m_DocCtrl->SetValue( alias->GetDescription() );
m_DocfileCtrl->SetValue( alias->GetDocFileName() );
m_KeywordsCtrl->SetValue( alias->GetKeyWords() );
} }

View File

@ -62,9 +62,9 @@ void Dialog_BodyGraphicText_Properties::InitDialog( )
m_TextSize->SetValue( msg ); m_TextSize->SetValue( msg );
m_TextValue->SetValue( m_GraphicText->m_Text ); m_TextValue->SetValue( m_GraphicText->m_Text );
if ( m_GraphicText->m_Unit == 0 ) if ( m_GraphicText->GetUnit() == 0 )
m_CommonUnit->SetValue( TRUE ); m_CommonUnit->SetValue( TRUE );
if ( m_GraphicText->m_Convert == 0 ) if ( m_GraphicText->GetConvert() == 0 )
m_CommonConvert->SetValue( TRUE ); m_CommonConvert->SetValue( TRUE );
if ( m_GraphicText->m_Orient == TEXT_ORIENT_VERT ) if ( m_GraphicText->m_Orient == TEXT_ORIENT_VERT )
m_Orient->SetValue( TRUE ); m_Orient->SetValue( TRUE );
@ -163,14 +163,14 @@ void Dialog_BodyGraphicText_Properties::OnOkClick( wxCommandEvent& event )
m_GraphicText->m_Orient = m_Parent->m_textOrientation; m_GraphicText->m_Orient = m_Parent->m_textOrientation;
if( m_Parent->m_drawSpecificUnit ) if( m_Parent->m_drawSpecificUnit )
m_GraphicText->m_Unit = m_Parent->GetUnit(); m_GraphicText->SetUnit( m_Parent->GetUnit() );
else else
m_GraphicText->m_Unit = 0; m_GraphicText->SetUnit( 0 );
if( m_Parent->m_drawSpecificConvert ) if( m_Parent->m_drawSpecificConvert )
m_GraphicText->m_Convert = m_Parent->GetConvert(); m_GraphicText->SetConvert( m_Parent->GetConvert() );
else else
m_GraphicText->m_Convert = 0; m_GraphicText->SetConvert( 0 );
if ( (m_TextShapeOpt->GetSelection() & 1 ) != 0 ) if ( (m_TextShapeOpt->GetSelection() & 1 ) != 0 )
m_GraphicText->m_Italic = true; m_GraphicText->m_Italic = true;

View File

@ -182,7 +182,7 @@ bool LIB_ARC::HitTest( const wxPoint& aRefPoint )
bool LIB_ARC::HitTest( wxPoint aReferencePoint, int aThreshold, const TRANSFORM& aTransform ) bool LIB_ARC::HitTest( wxPoint aReferencePoint, int aThreshold, const TRANSFORM& aTransform )
{ {
// TODO: use aTransMat to calculmates parameters // TODO: use aTransMat to calculates parameters
wxPoint relativePosition = aReferencePoint; wxPoint relativePosition = aReferencePoint;
NEGATE( relativePosition.y ); // reverse Y axis NEGATE( relativePosition.y ); // reverse Y axis
@ -271,7 +271,7 @@ void LIB_ARC::DoOffset( const wxPoint& aOffset )
} }
bool LIB_ARC::DoTestInside( EDA_Rect& aRect ) bool LIB_ARC::DoTestInside( EDA_Rect& aRect ) const
{ {
return aRect.Inside( m_ArcStart.x, -m_ArcStart.y ) return aRect.Inside( m_ArcStart.x, -m_ArcStart.y )
|| aRect.Inside( m_ArcEnd.x, -m_ArcEnd.y ); || aRect.Inside( m_ArcEnd.x, -m_ArcEnd.y );
@ -335,7 +335,7 @@ int LIB_ARC::GetPenSize()
void LIB_ARC::drawEditGraphics( EDA_Rect* aClipBox, wxDC* aDC, int aColor ) void LIB_ARC::drawEditGraphics( EDA_Rect* aClipBox, wxDC* aDC, int aColor )
{ {
// Thie edit indicators only get drawn when a new arc is being drawn. // The edit indicators only get drawn when a new arc is being drawn.
if( ( m_Flags & IS_NEW ) == 0 ) if( ( m_Flags & IS_NEW ) == 0 )
return; return;
@ -356,7 +356,7 @@ void LIB_ARC::drawEditGraphics( EDA_Rect* aClipBox, wxDC* aDC, int aColor )
void LIB_ARC::drawGraphic( WinEDA_DrawPanel* aPanel, wxDC* aDC, const wxPoint& aOffset, void LIB_ARC::drawGraphic( WinEDA_DrawPanel* aPanel, wxDC* aDC, const wxPoint& aOffset,
int aColor, int aDrawMode, void* aData, const TRANSFORM& aTransform ) int aColor, int aDrawMode, void* aData, const TRANSFORM& aTransform )
{ {
// DOn't draw the arc until the end point is selected. Only the edit indicators // Don't draw the arc until the end point is selected. Only the edit indicators
// get drawn at this time. // get drawn at this time.
if( ( m_Flags & IS_NEW ) && m_lastEditState == 1 ) if( ( m_Flags & IS_NEW ) && m_lastEditState == 1 )
return; return;
@ -539,7 +539,7 @@ void LIB_ARC::BeginEdit( int aEditMode, const wxPoint aPosition )
} }
else else
{ {
// Save the current arc positions in case the resize ia aborted. // Save the current arc positions in case the resize is aborted.
saveAttributes(); saveAttributes();
// The arc center point has to be rotated with while adjusting the // The arc center point has to be rotated with while adjusting the

View File

@ -21,6 +21,13 @@ class LIB_ARC : public LIB_DRAW_ITEM
OUTLINE, OUTLINE,
}; };
int m_Radius;
int m_t1; /* First radius angle of the arc in 0.1 degrees. */
int m_t2; /* Second radius angle of the arc in 0.1 degrees. */
wxPoint m_ArcStart;
wxPoint m_ArcEnd; /* Arc end position. */
wxPoint m_Pos; /* Radius center point. */
int m_Width; /* Line width */
wxPoint m_savedStartPos; wxPoint m_savedStartPos;
wxPoint m_savedEndPos; wxPoint m_savedEndPos;
int m_savedAngle1; int m_savedAngle1;
@ -66,15 +73,6 @@ class LIB_ARC : public LIB_DRAW_ITEM
*/ */
void calcRadiusAngles(); void calcRadiusAngles();
public:
int m_Radius;
int m_t1; /* First radius angle of the arc in 0.1 degrees. */
int m_t2; /* Second radius angle of the arc in 0.1 degrees. */
wxPoint m_ArcStart;
wxPoint m_ArcEnd; /* Arc end position. */
wxPoint m_Pos; /* Radius center point. */
int m_Width; /* Line width */
public: public:
LIB_ARC( LIB_COMPONENT * aParent ); LIB_ARC( LIB_COMPONENT * aParent );
LIB_ARC( const LIB_ARC& aArc ); LIB_ARC( const LIB_ARC& aArc );
@ -149,13 +147,13 @@ protected:
*/ */
virtual int DoCompare( const LIB_DRAW_ITEM& aOther ) const; virtual int DoCompare( const LIB_DRAW_ITEM& aOther ) const;
virtual void DoOffset( const wxPoint& aOffset ); virtual void DoOffset( const wxPoint& aOffset );
virtual bool DoTestInside( EDA_Rect& aRect ); virtual bool DoTestInside( EDA_Rect& aRect ) const;
virtual void DoMove( const wxPoint& aPosition ); virtual void DoMove( const wxPoint& aPosition );
virtual wxPoint DoGetPosition() { return m_Pos; } virtual wxPoint DoGetPosition() const { return m_Pos; }
virtual void DoMirrorHorizontal( const wxPoint& aCenter ); virtual void DoMirrorHorizontal( const wxPoint& aCenter );
virtual void DoPlot( PLOTTER* aPlotter, const wxPoint& aOffset, bool aFill, virtual void DoPlot( PLOTTER* aPlotter, const wxPoint& aOffset, bool aFill,
const TRANSFORM& aTransform ); const TRANSFORM& aTransform );
virtual int DoGetWidth() { return m_Width; } virtual int DoGetWidth() const { return m_Width; }
virtual void DoSetWidth( int aWidth ) { m_Width = aWidth; } virtual void DoSetWidth( int aWidth ) { m_Width = aWidth; }
}; };

View File

@ -158,7 +158,7 @@ void LIB_BEZIER::DoOffset( const wxPoint& aOffset )
} }
bool LIB_BEZIER::DoTestInside( EDA_Rect& aRect ) 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++ )
{ {

View File

@ -11,17 +11,16 @@
/**************************************************/ /**************************************************/
class LIB_BEZIER : public LIB_DRAW_ITEM class LIB_BEZIER : public LIB_DRAW_ITEM
{ {
int m_Width; // Line width
std::vector<wxPoint> m_BezierPoints; // list of parameter (3|4)
std::vector<wxPoint> m_PolyPoints; // list of points (>= 2)
/** /**
* Draw the bezier curve. * Draw the bezier curve.
*/ */
void drawGraphic( WinEDA_DrawPanel* aPanel, wxDC* aDC, const wxPoint& aOffset, void drawGraphic( WinEDA_DrawPanel* aPanel, wxDC* aDC, const wxPoint& aOffset,
int aColor, int aDrawMode, void* aData, const TRANSFORM& aTransform ); int aColor, int aDrawMode, void* aData, const TRANSFORM& aTransform );
public:
int m_Width; /* Line width */
std::vector<wxPoint> m_BezierPoints; // list of parameter (3|4)
std::vector<wxPoint> m_PolyPoints; // list of points (>= 2)
public: public:
LIB_BEZIER( LIB_COMPONENT * aParent ); LIB_BEZIER( LIB_COMPONENT * aParent );
LIB_BEZIER( const LIB_BEZIER& aBezier ); LIB_BEZIER( const LIB_BEZIER& aBezier );
@ -90,13 +89,13 @@ protected:
virtual int DoCompare( const LIB_DRAW_ITEM& aOther ) const; virtual int DoCompare( const LIB_DRAW_ITEM& aOther ) const;
virtual void DoOffset( const wxPoint& aOffset ); virtual void DoOffset( const wxPoint& aOffset );
virtual bool DoTestInside( EDA_Rect& aRect ); virtual bool DoTestInside( EDA_Rect& aRect ) const;
virtual void DoMove( const wxPoint& aPosition ); virtual void DoMove( const wxPoint& aPosition );
virtual wxPoint DoGetPosition() { return m_PolyPoints[0]; } virtual wxPoint DoGetPosition() const { return m_PolyPoints[0]; }
virtual void DoMirrorHorizontal( const wxPoint& aCenter ); virtual void DoMirrorHorizontal( const wxPoint& aCenter );
virtual void DoPlot( PLOTTER* aPlotter, const wxPoint& aOffset, bool aFill, virtual void DoPlot( PLOTTER* aPlotter, const wxPoint& aOffset, bool aFill,
const TRANSFORM& aTransform ); const TRANSFORM& aTransform );
virtual int DoGetWidth() { return m_Width; } virtual int DoGetWidth() const { return m_Width; }
virtual void DoSetWidth( int aWidth ) { m_Width = aWidth; } virtual void DoSetWidth( int aWidth ) { m_Width = aWidth; }
}; };

View File

@ -145,10 +145,10 @@ void LIB_CIRCLE::DoOffset( const wxPoint& aOffset )
} }
bool LIB_CIRCLE::DoTestInside( EDA_Rect& aRect ) bool LIB_CIRCLE::DoTestInside( EDA_Rect& aRect ) const
{ {
/* /*
* FIXME: This fails to take into acount 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.Inside( m_Pos.x, -m_Pos.y );

View File

@ -11,7 +11,11 @@
class LIB_CIRCLE : public LIB_DRAW_ITEM class LIB_CIRCLE : public LIB_DRAW_ITEM
{ {
int m_savedRadius; ///< Temporary storage of radius before editing begins. int m_Radius;
wxPoint m_Pos; // Position or centre (Arc and Circle) or start point (segments).
int m_Width; // Line width.
int m_savedRadius; // Temporary storage of radius before editing begins.
/** /**
* Draws the arc. * Draws the arc.
@ -36,12 +40,6 @@ class LIB_CIRCLE : public LIB_DRAW_ITEM
*/ */
void calcEdit( const wxPoint& aPosition ); void calcEdit( const wxPoint& aPosition );
public:
int m_Radius;
wxPoint m_Pos; /* Position or centre (Arc and Circle) or start point (segments) */
int m_Width; /* Line width */
public: public:
LIB_CIRCLE( LIB_COMPONENT * aParent ); LIB_CIRCLE( LIB_COMPONENT * aParent );
LIB_CIRCLE( const LIB_CIRCLE& aCircle ); LIB_CIRCLE( const LIB_CIRCLE& aCircle );
@ -115,13 +113,13 @@ protected:
virtual int DoCompare( const LIB_DRAW_ITEM& aOther ) const; virtual int DoCompare( const LIB_DRAW_ITEM& aOther ) const;
virtual void DoOffset( const wxPoint& aOffset ); virtual void DoOffset( const wxPoint& aOffset );
virtual bool DoTestInside( EDA_Rect& aRect ); virtual bool DoTestInside( EDA_Rect& aRect ) const;
virtual void DoMove( const wxPoint& aPosition ); virtual void DoMove( const wxPoint& aPosition );
virtual wxPoint DoGetPosition() { return m_Pos; } virtual wxPoint DoGetPosition() const { return m_Pos; }
virtual void DoMirrorHorizontal( const wxPoint& aCenter ); virtual void DoMirrorHorizontal( const wxPoint& aCenter );
virtual void DoPlot( PLOTTER* aPlotter, const wxPoint& aOffset, bool aFill, virtual void DoPlot( PLOTTER* aPlotter, const wxPoint& aOffset, bool aFill,
const TRANSFORM& aTransform ); const TRANSFORM& aTransform );
virtual int DoGetWidth() { return m_Width; } virtual int DoGetWidth() const { return m_Width; }
virtual void DoSetWidth( int aWidth ) { m_Width = aWidth; } virtual void DoSetWidth( int aWidth ) { m_Width = aWidth; }
}; };

View File

@ -127,7 +127,7 @@ void LIB_DRAW_ITEM::Draw( WinEDA_DrawPanel* aPanel, wxDC* aDC, const wxPoint& aO
drawGraphic( aPanel, aDC, wxPoint( 0, 0 ), color, g_XorMode, aData, aTransform ); drawGraphic( aPanel, aDC, wxPoint( 0, 0 ), color, g_XorMode, aData, aTransform );
} }
// Calculte the new attributes at the current cursor position. // Calculate the new attributes at the current cursor position.
calcEdit( aOffset ); calcEdit( aOffset );
// Draw the items using the new attributes. // Draw the items using the new attributes.

View File

@ -21,11 +21,6 @@ class LIB_PIN;
extern const int fill_tab[]; extern const int fill_tab[];
// Set KICAD_USE_LIB_OJBECT_EDIT to 1 to use build in ojbect editing mode.
#if !defined( KICAD_USE_LIB_OJBECT_EDIT )
#undef KICAD_USE_LIB_OJBECT_EDIT
#define KICAD_USE_LIB_OJBECT_EDIT 1
#endif
#define MINIMUM_SELECTION_DISTANCE 15 // Minimum selection distance in mils #define MINIMUM_SELECTION_DISTANCE 15 // Minimum selection distance in mils
@ -40,7 +35,7 @@ typedef boost::ptr_vector< LIB_DRAW_ITEM > LIB_DRAW_ITEM_LIST;
/** /**
* Helper for defining a list of pin object pointers. The list does not * Helper for defining a list of pin object pointers. The list does not
* use a Boost pointer class so the ojbect pointers do not accidently get * use a Boost pointer class so the object pointers do not accidently get
* deleted when the container is deleted. * deleted when the container is deleted.
*/ */
typedef std::vector< LIB_PIN* > LIB_PIN_LIST; typedef std::vector< LIB_PIN* > LIB_PIN_LIST;
@ -84,7 +79,6 @@ class LIB_DRAW_ITEM : public EDA_BaseStruct
*/ */
virtual void calcEdit( const wxPoint& aPosition ) {} virtual void calcEdit( const wxPoint& aPosition ) {}
/** /**
* Save the current item attributes while editing. * Save the current item attributes while editing.
* *
@ -100,12 +94,10 @@ class LIB_DRAW_ITEM : public EDA_BaseStruct
bool m_eraseLastDrawItem; ///< Used when editing a new draw item to prevent drawing bool m_eraseLastDrawItem; ///< Used when editing a new draw item to prevent drawing
///< artifacts. ///< artifacts.
protected:
wxPoint m_savedPos; ///< Temporary position when editng an existing item.
wxPoint m_initialPos; ///< Temporary position when moving an existing item.
wxPoint m_initialCursorPos; ///< Iniital cursor position at the begining of a move.
public: friend class LIB_COMPONENT;
protected:
/** /**
* Unit identification for multiple parts per package. Set to 0 if the * Unit identification for multiple parts per package. Set to 0 if the
* item is common to all units. * item is common to all units.
@ -127,6 +119,10 @@ public:
wxString m_typeName; ///< Name of object displayed in the message panel. wxString m_typeName; ///< Name of object displayed in the message panel.
wxPoint m_savedPos; ///< Temporary position when editing an existing item.
wxPoint m_initialPos; ///< Temporary position when moving an existing item.
wxPoint m_initialCursorPos; ///< Initial cursor position at the beginning of a move.
public: public:
LIB_DRAW_ITEM( KICAD_T aType, LIB_DRAW_ITEM( KICAD_T aType,
@ -139,13 +135,15 @@ public:
virtual ~LIB_DRAW_ITEM() { } virtual ~LIB_DRAW_ITEM() { }
wxString GetTypeName() { return m_typeName; }
/** /**
* Begin an editing a component library draw item in \a aEditMode at \a aPosition. * Begin an editing a component library draw item in \a aEditMode at \a aPosition.
* *
* This is used to start an editing action such as resize or move a draw object. * This is used to start an editing action such as resize or move a draw object.
* It typically would be called on a left click when a draw tool is selected in * It typically would be called on a left click when a draw tool is selected in
* the component library editor and one of the graphics tools is selected. It * the component library editor and one of the graphics tools is selected. It
* allows the draw item to maintian it's own internal state while it is being * allows the draw item to maintain it's own internal state while it is being
* edited. Call AbortEdit() to quit the editing mode. * edited. Call AbortEdit() to quit the editing mode.
* *
* @param aEditMode - The editing mode being performed. See base_struct.h for a list * @param aEditMode - The editing mode being performed. See base_struct.h for a list
@ -223,7 +221,7 @@ public:
* *
* Derived classes should override this function. * Derived classes should override this function.
* *
* @param aPosition - The coordinats to test. * @param aPosition - The coordinates to test.
* @return - true if a hit, else false * @return - true if a hit, else false
*/ */
virtual bool HitTest( const wxPoint& aPosition ) virtual bool HitTest( const wxPoint& aPosition )
@ -283,7 +281,7 @@ public:
/** /**
* Set drawing object offset from the current position. * Set drawing object offset from the current position.
* *
* @param aOffset - Cooridinates to offset position. * @param aOffset - Coordinates to offset position.
*/ */
void SetOffset( const wxPoint& aOffset ) { DoOffset( aOffset ); } void SetOffset( const wxPoint& aOffset ) { DoOffset( aOffset ); }
@ -296,7 +294,7 @@ public:
* @param aRect - Rectangle to check against. * @param aRect - Rectangle to check against.
* @return - True if object is inside rectangle. * @return - True if object is inside rectangle.
*/ */
bool Inside( EDA_Rect& aRect ) { return DoTestInside( aRect ); } bool Inside( EDA_Rect& aRect ) const { return DoTestInside( aRect ); }
/** /**
* Move a draw object to a new \a aPosition. * Move a draw object to a new \a aPosition.
@ -310,7 +308,7 @@ public:
/** /**
* Return the current draw object start position. * Return the current draw object start position.
*/ */
wxPoint GetPosition() { return DoGetPosition(); } wxPoint GetPosition() const { return DoGetPosition(); }
/** /**
* Mirror the draw object along the horizontal (X) axis about a point. * Mirror the draw object along the horizontal (X) axis about a point.
@ -345,7 +343,7 @@ public:
* *
* @return Width of draw object. * @return Width of draw object.
*/ */
int GetWidth() { return DoGetWidth(); } int GetWidth() const { return DoGetWidth(); }
void SetWidth( int aWidth ) { DoSetWidth( aWidth ); } void SetWidth( int aWidth ) { DoSetWidth( aWidth ); }
/** /**
@ -356,30 +354,14 @@ public:
* *
* @return - True if draw object can be fill. Default is false. * @return - True if draw object can be fill. Default is false.
*/ */
bool IsFillable() { return m_isFillable; } bool IsFillable() const { return m_isFillable; }
/**
* Return the modified status of the draw object.
*
* @return - True if the draw object has been modified.
*/
bool IsModified() { return ( m_Flags & IS_CHANGED ) != 0; }
/**
* Return the new item status of the draw object.
*
* @return - True if the draw item has been added to the parent component.
*/
bool IsNew() { return ( m_Flags & IS_NEW ) != 0; }
bool IsMoving() { return ( m_Flags & IS_MOVED ); }
bool IsResizing() { return ( m_Flags & IS_RESIZED ); }
/** /**
* Return the draw item editing mode status. * Return the draw item editing mode status.
* *
* @return - True if the item is being edited. * @return - True if the item is being edited.
*/ */
bool InEditMode() { return ( m_Flags & ( IS_NEW | IS_MOVED | IS_RESIZED ) ) != 0; } bool InEditMode() const { return ( m_Flags & ( IS_NEW | IS_MOVED | IS_RESIZED ) ) != 0; }
void SetEraseLastDrawItem( bool aErase = true ) { m_eraseLastDrawItem = aErase; } void SetEraseLastDrawItem( bool aErase = true ) { m_eraseLastDrawItem = aErase; }
@ -387,11 +369,15 @@ public:
void SetUnit( int aUnit ) { m_Unit = aUnit; } void SetUnit( int aUnit ) { m_Unit = aUnit; }
int GetUnit() { return m_Unit; } int GetUnit() const { return m_Unit; }
void SetConvert( int aConvert ) { m_Convert = aConvert; } void SetConvert( int aConvert ) { m_Convert = aConvert; }
int GetConvert() { return m_Convert; } int GetConvert() const { return m_Convert; }
void SetFillMode( FILL_T aFillMode ) { m_Fill = aFillMode; }
FILL_T GetFillMode() const { return m_Fill; }
protected: protected:
virtual LIB_DRAW_ITEM* DoGenCopy() = 0; virtual LIB_DRAW_ITEM* DoGenCopy() = 0;
@ -409,13 +395,13 @@ protected:
*/ */
virtual int DoCompare( const LIB_DRAW_ITEM& aOther ) const = 0; virtual int DoCompare( const LIB_DRAW_ITEM& aOther ) const = 0;
virtual void DoOffset( const wxPoint& aOffset ) = 0; virtual void DoOffset( const wxPoint& aOffset ) = 0;
virtual bool DoTestInside( EDA_Rect& aRect ) = 0; virtual bool DoTestInside( EDA_Rect& aRect ) const = 0;
virtual void DoMove( const wxPoint& aPosition ) = 0; virtual void DoMove( const wxPoint& aPosition ) = 0;
virtual wxPoint DoGetPosition() = 0; virtual wxPoint DoGetPosition() const = 0;
virtual void DoMirrorHorizontal( const wxPoint& aCenter ) = 0; virtual void DoMirrorHorizontal( const wxPoint& aCenter ) = 0;
virtual void DoPlot( PLOTTER* aPlotter, const wxPoint& aOffset, bool aFill, virtual void DoPlot( PLOTTER* aPlotter, const wxPoint& aOffset, bool aFill,
const TRANSFORM& aTransform ) = 0; const TRANSFORM& aTransform ) = 0;
virtual int DoGetWidth() = 0; virtual int DoGetWidth() const = 0;
virtual void DoSetWidth( int aWidth ) = 0; virtual void DoSetWidth( int aWidth ) = 0;
/** Flag to indicate if draw item is fillable. Default is false. */ /** Flag to indicate if draw item is fillable. Default is false. */

View File

@ -37,7 +37,7 @@ void WinEDA_LibeditFrame::OnImportPart( wxCommandEvent& event )
wxString errMsg; wxString errMsg;
wxFileName fn; wxFileName fn;
CMP_LIBRARY* LibTmp; CMP_LIBRARY* LibTmp;
CMP_LIB_ENTRY* LibEntry; LIB_ALIAS* LibEntry;
m_lastDrawItem = NULL; m_lastDrawItem = NULL;
@ -61,8 +61,7 @@ void WinEDA_LibeditFrame::OnImportPart( wxCommandEvent& event )
{ {
wxString msg; wxString msg;
msg.Printf( _( "Component library file <%s> is empty." ), msg.Printf( _( "Component library file <%s> is empty." ), GetChars( fn.GetFullPath() ) );
GetChars( fn.GetFullPath() ) );
DisplayError( this, msg ); DisplayError( this, msg );
return; return;
} }

View File

@ -484,7 +484,7 @@ void LIB_FIELD::DoOffset( const wxPoint& offset )
} }
bool LIB_FIELD::DoTestInside( EDA_Rect& rect ) 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

View File

@ -214,13 +214,13 @@ protected:
virtual int DoCompare( const LIB_DRAW_ITEM& other ) const; virtual int DoCompare( const LIB_DRAW_ITEM& other ) const;
virtual void DoOffset( const wxPoint& offset ); virtual void DoOffset( const wxPoint& offset );
virtual bool DoTestInside( EDA_Rect& rect ); virtual bool DoTestInside( EDA_Rect& rect ) const;
virtual void DoMove( const wxPoint& newPosition ); virtual void DoMove( const wxPoint& newPosition );
virtual wxPoint DoGetPosition( void ) { return m_Pos; } virtual wxPoint DoGetPosition( void ) const { return m_Pos; }
virtual void DoMirrorHorizontal( const wxPoint& center ); virtual void DoMirrorHorizontal( const wxPoint& center );
virtual void DoPlot( PLOTTER* plotter, const wxPoint& offset, bool fill, virtual void DoPlot( PLOTTER* plotter, const wxPoint& offset, bool fill,
const TRANSFORM& aTransform ); const TRANSFORM& aTransform );
virtual int DoGetWidth( void ) { return m_Width; } virtual int DoGetWidth( void ) const { return m_Width; }
virtual void DoSetWidth( int width ) { m_Width = width; } virtual void DoSetWidth( int width ) { m_Width = width; }
}; };

View File

@ -1465,7 +1465,7 @@ void LIB_PIN::PlotPinTexts( PLOTTER *plotter,
/* return the pin end position, for a component in normal orient */ /* return the pin end position, for a component in normal orient */
wxPoint LIB_PIN::ReturnPinEndPoint() wxPoint LIB_PIN::ReturnPinEndPoint() const
{ {
wxPoint pos = m_Pos; wxPoint pos = m_Pos;
@ -1642,7 +1642,7 @@ void LIB_PIN::DoOffset( const wxPoint& offset )
} }
bool LIB_PIN::DoTestInside( EDA_Rect& rect ) bool LIB_PIN::DoTestInside( EDA_Rect& rect ) const
{ {
wxPoint end = ReturnPinEndPoint(); wxPoint end = ReturnPinEndPoint();

View File

@ -155,7 +155,7 @@ public:
virtual void DisplayInfo( WinEDA_DrawFrame* frame ); virtual void DisplayInfo( WinEDA_DrawFrame* frame );
virtual EDA_Rect GetBoundingBox(); virtual EDA_Rect GetBoundingBox();
wxPoint ReturnPinEndPoint(); wxPoint ReturnPinEndPoint() const;
int ReturnPinDrawOrient( const TRANSFORM& aTransform ); int ReturnPinDrawOrient( const TRANSFORM& aTransform );
@ -433,13 +433,13 @@ protected:
*/ */
virtual int DoCompare( const LIB_DRAW_ITEM& aOther ) const; virtual int DoCompare( const LIB_DRAW_ITEM& aOther ) const;
virtual void DoOffset( const wxPoint& aOffset ); virtual void DoOffset( const wxPoint& aOffset );
virtual bool DoTestInside( EDA_Rect& aRect ); virtual bool DoTestInside( EDA_Rect& aRect ) const;
virtual void DoMove( const wxPoint& aPosition ); virtual void DoMove( const wxPoint& aPosition );
virtual wxPoint DoGetPosition() { return m_Pos; } virtual wxPoint DoGetPosition() const { return m_Pos; }
virtual void DoMirrorHorizontal( const wxPoint& aCenter ); virtual void DoMirrorHorizontal( const wxPoint& aCenter );
virtual void DoPlot( PLOTTER* aPlotter, const wxPoint& aOffset, bool aFill, virtual void DoPlot( PLOTTER* aPlotter, const wxPoint& aOffset, bool aFill,
const TRANSFORM& aTransform ); const TRANSFORM& aTransform );
virtual int DoGetWidth() { return m_Width; } virtual int DoGetWidth() const { return m_Width; }
virtual void DoSetWidth( int aWidth ) { m_Width = aWidth; } virtual void DoSetWidth( int aWidth ) { m_Width = aWidth; }
}; };

View File

@ -8,7 +8,6 @@
#include "class_drawpanel.h" #include "class_drawpanel.h"
#include "plot_common.h" #include "plot_common.h"
#include "trigo.h" #include "trigo.h"
#include "bezier_curves.h"
#include "general.h" #include "general.h"
#include "protos.h" #include "protos.h"
@ -155,7 +154,7 @@ void LIB_POLYLINE::DoOffset( const wxPoint& aOffset )
} }
bool LIB_POLYLINE::DoTestInside( EDA_Rect& aRect ) 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++ )
{ {
@ -252,7 +251,7 @@ void LIB_POLYLINE::drawGraphic( WinEDA_DrawPanel* aPanel, wxDC* aDC, const wxPoi
else else
color = aColor; color = aColor;
// Set the size of the buffer od coordinates // Set the size of the buffer of coordinates
if( Buf_Poly_Drawings == NULL ) if( Buf_Poly_Drawings == NULL )
{ {
Buf_Poly_Size = m_PolyPoints.size(); Buf_Poly_Size = m_PolyPoints.size();

View File

@ -11,6 +11,10 @@
class LIB_POLYLINE : public LIB_DRAW_ITEM class LIB_POLYLINE : public LIB_DRAW_ITEM
{ {
int m_Width; // Line width
std::vector<wxPoint> m_PolyPoints; // list of points (>= 2)
int m_ModifyIndex; // Index of the polyline point to modify
std::vector<wxPoint> m_savedPolyPoints; std::vector<wxPoint> m_savedPolyPoints;
/** /**
@ -30,17 +34,13 @@ class LIB_POLYLINE : public LIB_DRAW_ITEM
void restoreAttributes(); void restoreAttributes();
/** /**
* Calculate the polyline attributes ralative to \a aPosition while editing. * Calculate the polyline attributes relative to \a aPosition while editing.
* *
* @param aPosition - Edit position in drawing units. * @param aPosition - Edit position in drawing units.
*/ */
void calcEdit( const wxPoint& aPosition ); void calcEdit( const wxPoint& aPosition );
public: public:
int m_Width; /* Line width */
std::vector<wxPoint> m_PolyPoints; // list of points (>= 2)
int m_ModifyIndex; // Index of the polyline point to modify
public: public:
LIB_POLYLINE( LIB_COMPONENT * aParent ); LIB_POLYLINE( LIB_COMPONENT * aParent );
LIB_POLYLINE( const LIB_POLYLINE& aPolyline ); LIB_POLYLINE( const LIB_POLYLINE& aPolyline );
@ -120,7 +120,7 @@ protected:
virtual LIB_DRAW_ITEM* DoGenCopy(); virtual LIB_DRAW_ITEM* DoGenCopy();
/** /**
* Provide the ployline segment draw object specific comparison. * Provide the polyline segment draw object specific comparison.
* *
* The sort order for each polyline segment point is as follows: * The sort order for each polyline segment point is as follows:
* - Line segment point horizontal (X) position. * - Line segment point horizontal (X) position.
@ -129,13 +129,13 @@ protected:
virtual int DoCompare( const LIB_DRAW_ITEM& aOther ) const; virtual int DoCompare( const LIB_DRAW_ITEM& aOther ) const;
virtual void DoOffset( const wxPoint& aOffset ); virtual void DoOffset( const wxPoint& aOffset );
virtual bool DoTestInside( EDA_Rect& aRect ); virtual bool DoTestInside( EDA_Rect& aRect ) const;
virtual void DoMove( const wxPoint& aPosition ); virtual void DoMove( const wxPoint& aPosition );
virtual wxPoint DoGetPosition() { return m_PolyPoints[0]; } virtual wxPoint DoGetPosition() const { return m_PolyPoints[0]; }
virtual void DoMirrorHorizontal( const wxPoint& aCenter ); virtual void DoMirrorHorizontal( const wxPoint& aCenter );
virtual void DoPlot( PLOTTER* aPlotter, const wxPoint& aOffset, bool aFill, virtual void DoPlot( PLOTTER* aPlotter, const wxPoint& aOffset, bool aFill,
const TRANSFORM& aTransform ); const TRANSFORM& aTransform );
virtual int DoGetWidth() { return m_Width; } virtual int DoGetWidth() const { return m_Width; }
virtual void DoSetWidth( int aWidth ) { m_Width = aWidth; } virtual void DoSetWidth( int aWidth ) { m_Width = aWidth; }
}; };

View File

@ -116,7 +116,7 @@ void LIB_RECTANGLE::DoOffset( const wxPoint& aOffset )
} }
bool LIB_RECTANGLE::DoTestInside( EDA_Rect& aRect ) 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.Inside( m_Pos.x, -m_Pos.y ) || aRect.Inside( m_End.x, -m_End.y );
} }

View File

@ -11,7 +11,14 @@
class LIB_RECTANGLE : public LIB_DRAW_ITEM class LIB_RECTANGLE : public LIB_DRAW_ITEM
{ {
wxPoint m_savedEndPos; ///< Tempory storage of the current end position before editing. wxPoint m_End; // Rectangle end point.
wxPoint m_Pos; // Rectangle start point.
int m_Width; // Line width
bool m_isWidthLocked; // Flag: Keep width locked
bool m_isHeightLocked; // Flag: Keep height locked
bool m_isStartPointSelected; // Flag: is the upper left edge selected?
wxPoint m_savedEndPos; // Temporary storage of current end position before editing.
/** /**
* Draw the rectangle. * Draw the rectangle.
@ -30,20 +37,13 @@ class LIB_RECTANGLE : public LIB_DRAW_ITEM
void restoreAttributes(); void restoreAttributes();
/** /**
* Calculate the rectangle attrubites ralative to \a aPosition while editing. * Calculate the rectangle attributes relative to \a aPosition while editing.
* *
* @param aPosition - Edit position in drawing units. * @param aPosition - Edit position in drawing units.
*/ */
void calcEdit( const wxPoint& aPosition ); void calcEdit( const wxPoint& aPosition );
public: public:
wxPoint m_End; /* Rectangle end point. */
wxPoint m_Pos; /* Rectangle start point. */
int m_Width; /* Line width */
bool m_isWidthLocked; /* Flag: Keep width locked */
bool m_isHeightLocked; /* Flag: Keep height locked */
bool m_isStartPointSelected; /* Flag: is the upper left edge selected ? */
public: public:
LIB_RECTANGLE( LIB_COMPONENT * aParent ); LIB_RECTANGLE( LIB_COMPONENT * aParent );
LIB_RECTANGLE( const LIB_RECTANGLE& aRect ); LIB_RECTANGLE( const LIB_RECTANGLE& aRect );
@ -53,6 +53,7 @@ public:
return wxT( "LIB_RECTANGLE" ); return wxT( "LIB_RECTANGLE" );
} }
void SetEndPosition( const wxPoint& aPosition ) { m_End = aPosition; }
/** /**
* Write rectangle object out to a FILE in "*.lib" format. * Write rectangle object out to a FILE in "*.lib" format.
@ -118,15 +119,15 @@ protected:
virtual int DoCompare( const LIB_DRAW_ITEM& aOther ) const; virtual int DoCompare( const LIB_DRAW_ITEM& aOther ) const;
virtual void DoOffset( const wxPoint& aOffset ); virtual void DoOffset( const wxPoint& aOffset );
virtual bool DoTestInside( EDA_Rect& aRect ); virtual bool DoTestInside( EDA_Rect& aRect ) const;
virtual void DoMove( const wxPoint& aPosition ); virtual void DoMove( const wxPoint& aPosition );
virtual wxPoint DoGetPosition() { return m_Pos; } virtual wxPoint DoGetPosition() const { return m_Pos; }
virtual void DoMirrorHorizontal( const wxPoint& aCenter ); virtual void DoMirrorHorizontal( const wxPoint& aCenter );
virtual void DoPlot( PLOTTER* aPlotter, const wxPoint& aOffset, bool aFill, virtual void DoPlot( PLOTTER* aPlotter, const wxPoint& aOffset, bool aFill,
const TRANSFORM& aTransform ); const TRANSFORM& aTransform );
virtual int DoGetWidth() { return m_Width; } virtual int DoGetWidth() const { return m_Width; }
virtual void DoSetWidth( int aWidth ) { m_Width = aWidth; } virtual void DoSetWidth( int aWidth ) { m_Width = aWidth; }
}; };
#endif // _LIB_REACTANGLE_H_ #endif // _LIB_RECTANGLE_H_

View File

@ -227,7 +227,7 @@ void LIB_TEXT::DoOffset( const wxPoint& offset )
} }
bool LIB_TEXT::DoTestInside( EDA_Rect& rect ) 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

View File

@ -144,13 +144,13 @@ protected:
virtual int DoCompare( const LIB_DRAW_ITEM& aOther ) const; virtual int DoCompare( const LIB_DRAW_ITEM& aOther ) const;
virtual void DoOffset( const wxPoint& aOffset ); virtual void DoOffset( const wxPoint& aOffset );
virtual bool DoTestInside( EDA_Rect& aRect ); virtual bool DoTestInside( EDA_Rect& aRect ) const;
virtual void DoMove( const wxPoint& aPosition ); virtual void DoMove( const wxPoint& aPosition );
virtual wxPoint DoGetPosition() { return m_Pos; } virtual wxPoint DoGetPosition() const { return m_Pos; }
virtual void DoMirrorHorizontal( const wxPoint& aCenter ); virtual void DoMirrorHorizontal( const wxPoint& aCenter );
virtual void DoPlot( PLOTTER* aPlotter, const wxPoint& aOffset, bool aFill, virtual void DoPlot( PLOTTER* aPlotter, const wxPoint& aOffset, bool aFill,
const TRANSFORM& aTransform ); const TRANSFORM& aTransform );
virtual int DoGetWidth() { return m_Width; } virtual int DoGetWidth() const { return m_Width; }
virtual void DoSetWidth( int aWidth ) { m_Width = aWidth; } virtual void DoSetWidth( int aWidth ) { m_Width = aWidth; }
}; };

View File

@ -62,12 +62,12 @@ void WinEDA_LibeditFrame::LoadOneLibraryPart( wxCommandEvent& event )
int i; int i;
wxString msg; wxString msg;
wxString CmpName; wxString CmpName;
CMP_LIB_ENTRY* LibEntry = NULL; LIB_ALIAS* LibEntry = NULL;
DrawPanel->UnManageCursor( 0, wxCURSOR_ARROW ); DrawPanel->UnManageCursor( 0, wxCURSOR_ARROW );
if( GetBaseScreen()->IsModify() && !IsOK( this, _( "Current part not \ if( GetBaseScreen()->IsModify()
saved.\n\nDiscard current changes?" ) ) ) && !IsOK( this, _( "Current part not saved.\n\nDiscard current changes?" ) ) )
return; return;
// No current lib, ask user for the library to use. // No current lib, ask user for the library to use.
@ -97,7 +97,7 @@ saved.\n\nDiscard current changes?" ) ) )
if( LibEntry == NULL ) if( LibEntry == NULL )
{ {
msg.Printf( _( "Component or alias name \"%s\" not found in library \"%s\"." ), msg.Printf( _( "Component name \"%s\" not found in library \"%s\"." ),
GetChars( CmpName ), GetChars( CmpName ),
GetChars( m_library->GetName() ) ); GetChars( m_library->GetName() ) );
DisplayError( this, msg ); DisplayError( this, msg );
@ -125,7 +125,7 @@ saved.\n\nDiscard current changes?" ) ) )
* 1 if error * 1 if error
* m_component advanced copy and created * m_component advanced copy and created
*/ */
bool WinEDA_LibeditFrame::LoadOneLibraryPartAux( CMP_LIB_ENTRY* aEntry, CMP_LIBRARY* aLibrary ) bool WinEDA_LibeditFrame::LoadOneLibraryPartAux( LIB_ALIAS* aEntry, CMP_LIBRARY* aLibrary )
{ {
wxString msg, cmpName, rootName; wxString msg, cmpName, rootName;
LIB_COMPONENT* component; LIB_COMPONENT* component;
@ -142,21 +142,14 @@ bool WinEDA_LibeditFrame::LoadOneLibraryPartAux( CMP_LIB_ENTRY* aEntry, CMP_LIBR
cmpName = m_aliasName = aEntry->GetName(); cmpName = m_aliasName = aEntry->GetName();
if( aEntry->isAlias() )
{
LIB_ALIAS* alias = (LIB_ALIAS*) aEntry; LIB_ALIAS* alias = (LIB_ALIAS*) aEntry;
component = alias->GetComponent(); component = alias->GetComponent();
wxASSERT( component != NULL && component->isComponent() ); wxASSERT( component != NULL );
wxLogDebug( wxT( "\"<%s>\" is alias of \"<%s>\"" ), wxLogDebug( wxT( "\"<%s>\" is alias of \"<%s>\"" ),
GetChars( cmpName ), GetChars( cmpName ),
GetChars( component->GetName() ) ); GetChars( component->GetName() ) );
}
else
{
component = (LIB_COMPONENT*) aEntry;
}
if( m_component ) if( m_component )
{ {
@ -377,7 +370,7 @@ void WinEDA_LibeditFrame::DisplayCmpDoc()
void WinEDA_LibeditFrame::DeleteOnePart( wxCommandEvent& event ) void WinEDA_LibeditFrame::DeleteOnePart( wxCommandEvent& event )
{ {
wxString CmpName; wxString CmpName;
CMP_LIB_ENTRY* LibEntry; LIB_ALIAS* LibEntry;
wxArrayString ListNames; wxArrayString ListNames;
wxString msg; wxString msg;
@ -448,7 +441,7 @@ void WinEDA_LibeditFrame::DeleteOnePart( wxCommandEvent& event )
All changes will be lost. Discard changes?" ) ) ) All changes will be lost. Discard changes?" ) ) )
return; return;
CMP_LIB_ENTRY* nextEntry = m_library->RemoveEntry( LibEntry ); LIB_ALIAS* nextEntry = m_library->RemoveEntry( LibEntry );
if( nextEntry != NULL ) if( nextEntry != NULL )
{ {
@ -618,8 +611,6 @@ void WinEDA_LibeditFrame::SaveOnePartInMemory()
m_drawItem = m_lastDrawItem = NULL; m_drawItem = m_lastDrawItem = NULL;
wxASSERT( m_component->isComponent() );
if( oldComponent != NULL ) if( oldComponent != NULL )
Component = m_library->ReplaceComponent( oldComponent, m_component ); Component = m_library->ReplaceComponent( oldComponent, m_component );
else else

View File

@ -161,7 +161,9 @@ void WinEDA_LibeditFrame::OnLeftDClick( wxDC* DC, const wxPoint& MousePos )
} }
if( m_drawItem == NULL ) if( m_drawItem == NULL )
{ {
EditComponentProperties(); wxCommandEvent cmd( wxEVT_COMMAND_MENU_SELECTED );
cmd.SetId( ID_LIBEDIT_GET_FRAME_EDIT_PART );
GetEventHandler()->ProcessEvent( cmd );
} }
} }

View File

@ -210,10 +210,9 @@ private:
void SelectActiveLibrary(); void SelectActiveLibrary();
void SaveActiveLibrary( wxCommandEvent& event ); void SaveActiveLibrary( wxCommandEvent& event );
bool LoadOneLibraryPartAux( CMP_LIB_ENTRY* LibEntry, CMP_LIBRARY* Library ); bool LoadOneLibraryPartAux( LIB_ALIAS* LibEntry, CMP_LIBRARY* Library );
void DisplayCmpDoc(); void DisplayCmpDoc();
void EditComponentProperties();
// General editing // General editing
public: public:

View File

@ -722,11 +722,11 @@ XNODE* EXPORT_HELP::makeGenericLibParts()
xlibpart->AddAttribute( sPart, lcomp->GetName() ); xlibpart->AddAttribute( sPart, lcomp->GetName() );
//----- show the important properties ------------------------- //----- show the important properties -------------------------
if( !lcomp->GetDescription().IsEmpty() ) if( !lcomp->GetAlias( 0 )->GetDescription().IsEmpty() )
xlibpart->AddChild( node( sDescr, lcomp->GetDescription() ) ); xlibpart->AddChild( node( sDescr, lcomp->GetAlias( 0 )->GetDescription() ) );
if( !lcomp->GetDocFileName().IsEmpty() ) if( !lcomp->GetAlias( 0 )->GetDocFileName().IsEmpty() )
xlibpart->AddChild( node( sDocs, lcomp->GetDocFileName() ) ); xlibpart->AddChild( node( sDocs, lcomp->GetAlias( 0 )->GetDocFileName() ) );
// Write the footprint list // Write the footprint list
if( lcomp->GetFootPrints().GetCount() ) if( lcomp->GetFootPrints().GetCount() )
@ -1581,10 +1581,10 @@ void EXPORT_HELP::findAllInstancesOfComponent( SCH_COMPONENT* aComponent,
{ {
wxASSERT( pin->Type() == COMPONENT_PIN_DRAW_TYPE ); wxASSERT( pin->Type() == COMPONENT_PIN_DRAW_TYPE );
if( pin->m_Unit && pin->m_Unit != unit2 ) if( pin->GetUnit() && pin->GetUnit() != unit2 )
continue; continue;
if( pin->m_Convert && pin->m_Convert != comp2->m_Convert ) if( pin->GetConvert() && pin->GetConvert() != comp2->m_Convert )
continue; continue;
// A suitable pin is found: add it to the current list // A suitable pin is found: add it to the current list

View File

@ -594,12 +594,11 @@ static void AddConnectedObjects( SCH_SHEET_PATH* sheetlist,
{ {
wxASSERT( pin->Type() == COMPONENT_PIN_DRAW_TYPE ); wxASSERT( pin->Type() == COMPONENT_PIN_DRAW_TYPE );
if( pin->m_Unit && if( pin->GetUnit() &&
( pin->m_Unit != DrawLibItem->GetUnitSelection( sheetlist ) ) ) ( pin->GetUnit() != DrawLibItem->GetUnitSelection( sheetlist ) ) )
continue; continue;
if( pin->m_Convert && if( pin->GetConvert() && ( pin->GetConvert() != DrawLibItem->m_Convert ) )
( pin->m_Convert != DrawLibItem->m_Convert ) )
continue; continue;
wxPoint pos2 = DrawLibItem->m_Transform.TransformCoordinate( pin->m_Pos ) + wxPoint pos2 = DrawLibItem->m_Transform.TransformCoordinate( pin->m_Pos ) +

View File

@ -244,18 +244,13 @@ void AddMenusForComponent( wxMenu* PopMenu, SCH_COMPONENT* Component )
} }
wxString msg; wxString msg;
CMP_LIB_ENTRY* libEntry; LIB_ALIAS* libEntry;
LIB_COMPONENT* libComponent = NULL; LIB_COMPONENT* libComponent = NULL;
libEntry = CMP_LIBRARY::FindLibraryEntry( Component->m_ChipName ); libEntry = CMP_LIBRARY::FindLibraryEntry( Component->m_ChipName );
if( libEntry ) if( libEntry )
{ libComponent = libEntry->GetComponent();
if( libEntry->isAlias() )
libComponent = ( (LIB_ALIAS*) libEntry )->GetComponent();
else
libComponent = (LIB_COMPONENT*) libEntry;
}
if( !Component->m_Flags ) if( !Component->m_Flags )
{ {

View File

@ -105,8 +105,8 @@ void WinEDA_LibeditFrame::OnEditPin( wxCommandEvent& event )
dlg.SetLength( ReturnStringFromValue( g_UserUnit, pin->m_PinLen, dlg.SetLength( ReturnStringFromValue( g_UserUnit, pin->m_PinLen,
m_InternalUnits ) ); m_InternalUnits ) );
dlg.SetLengthUnits( units ); dlg.SetLengthUnits( units );
dlg.SetAddToAllParts( pin->m_Unit == 0 ); dlg.SetAddToAllParts( pin->GetUnit() == 0 );
dlg.SetAddToAllBodyStyles( pin->m_Convert == 0 ); dlg.SetAddToAllBodyStyles( pin->GetConvert() == 0 );
dlg.SetVisible( pin->IsVisible() ); dlg.SetVisible( pin->IsVisible() );
/* This ugly hack fixes a bug in wxWidgets 2.8.7 and likely earlier /* This ugly hack fixes a bug in wxWidgets 2.8.7 and likely earlier
@ -430,8 +430,8 @@ void WinEDA_LibeditFrame::CreatePin( wxDC* DC )
m_drawItem = pin; m_drawItem = pin;
pin->m_Flags = IS_NEW; pin->m_Flags = IS_NEW;
pin->m_Unit = m_unit; pin->SetUnit( m_unit );
pin->m_Convert = m_convert; pin->SetConvert( m_convert );
/* Flag pins to consider */ /* Flag pins to consider */
if( g_EditPinByPinIsOn == false ) if( g_EditPinByPinIsOn == false )
@ -447,14 +447,14 @@ void WinEDA_LibeditFrame::CreatePin( wxDC* DC )
pin->m_PinNumSize = LastPinNumSize; pin->m_PinNumSize = LastPinNumSize;
if( LastPinCommonConvert ) if( LastPinCommonConvert )
pin->m_Convert = 0; pin->SetConvert( 0 );
else else
pin->m_Convert = m_convert; pin->SetConvert( m_convert );
if( LastPinCommonUnit ) if( LastPinCommonUnit )
pin->m_Unit = 0; pin->SetUnit( 0 );
else else
pin->m_Unit = m_unit; pin->SetUnit( m_unit );
if( LastPinVisible ) if( LastPinVisible )
pin->m_Attributs &= ~PINNOTDRAW; pin->m_Attributs &= ~PINNOTDRAW;
@ -497,38 +497,38 @@ static void CreateImagePins( LIB_PIN* Pin, int unit, int convert, bool asDeMorga
if( g_EditPinByPinIsOn ) if( g_EditPinByPinIsOn )
return; return;
if( asDeMorgan && ( Pin->m_Convert != 0 ) ) if( asDeMorgan && ( Pin->GetConvert() != 0 ) )
CreateConv = true; CreateConv = true;
/* Create "convert" pin at the current position. */ /* Create "convert" pin at the current position. */
if( CreateConv == true ) if( CreateConv == true )
{ {
NewPin = (LIB_PIN*) Pin->GenCopy(); NewPin = (LIB_PIN*) Pin->GenCopy();
if( Pin->m_Convert > 1 ) if( Pin->GetConvert() > 1 )
NewPin->m_Convert = 1; NewPin->SetConvert( 1 );
else else
NewPin->m_Convert = 2; NewPin->SetConvert( 2 );
Pin->GetParent()->AddDrawItem( NewPin ); Pin->GetParent()->AddDrawItem( NewPin );
} }
for( ii = 1; ii <= Pin->GetParent()->GetPartCount(); ii++ ) for( ii = 1; ii <= Pin->GetParent()->GetPartCount(); ii++ )
{ {
if( ii == unit || Pin->m_Unit == 0 ) if( ii == unit || Pin->GetUnit() == 0 )
continue; /* Pin common to all units. */ continue; /* Pin common to all units. */
NewPin = (LIB_PIN*) Pin->GenCopy(); NewPin = (LIB_PIN*) Pin->GenCopy();
if( convert != 0 ) if( convert != 0 )
NewPin->m_Convert = 1; NewPin->SetConvert( 1 );
NewPin->m_Unit = ii; NewPin->SetUnit( ii );
Pin->GetParent()->AddDrawItem( NewPin ); Pin->GetParent()->AddDrawItem( NewPin );
if( CreateConv == false ) if( CreateConv == false )
continue; continue;
NewPin = (LIB_PIN*) Pin->GenCopy(); NewPin = (LIB_PIN*) Pin->GenCopy();
NewPin->m_Convert = 2; NewPin->SetConvert( 2 );
if( Pin->m_Unit != 0 ) if( Pin->GetUnit() != 0 )
NewPin->m_Unit = ii; NewPin->SetUnit( ii );
Pin->GetParent()->AddDrawItem( NewPin ); Pin->GetParent()->AddDrawItem( NewPin );
} }
} }
@ -558,7 +558,7 @@ void WinEDA_LibeditFrame::GlobalSetPins( wxDC* DC, LIB_PIN* MasterPin, int id )
Pin = m_component->GetNextPin(); Pin = m_component->GetNextPin();
for( ; Pin != NULL; Pin = m_component->GetNextPin( Pin ) ) for( ; Pin != NULL; Pin = m_component->GetNextPin( Pin ) )
{ {
if( ( Pin->m_Convert ) && ( Pin->m_Convert != m_convert ) ) if( ( Pin->GetConvert() ) && ( Pin->GetConvert() != m_convert ) )
continue; continue;
// Is it the "selected mode" ? // Is it the "selected mode" ?
@ -639,11 +639,11 @@ bool sort_by_pin_number( const LIB_PIN* ref, const LIB_PIN* tst )
if( test == 0 ) if( test == 0 )
{ {
test = ref->m_Convert - tst->m_Convert; test = ref->GetConvert() - tst->GetConvert();
} }
if( test == 0 ) if( test == 0 )
{ {
test = ref->m_Unit - tst->m_Unit; test = ref->GetUnit() - tst->GetUnit();
} }
return test < 0; return test < 0;
} }
@ -693,8 +693,8 @@ void WinEDA_LibeditFrame::OnCheckComponent( wxCommandEvent& event )
Pin = PinList[ii - 1]; Pin = PinList[ii - 1];
if( Pin->m_PinNum != curr_pin->m_PinNum if( Pin->m_PinNum != curr_pin->m_PinNum
|| Pin->m_Convert != curr_pin->m_Convert || Pin->GetConvert() != curr_pin->GetConvert()
|| Pin->m_Unit != curr_pin->m_Unit ) || Pin->GetUnit() != curr_pin->GetUnit() )
continue; continue;
dup_error++; dup_error++;
@ -713,13 +713,13 @@ void WinEDA_LibeditFrame::OnCheckComponent( wxCommandEvent& event )
if( m_component->GetPartCount() > 1 ) if( m_component->GetPartCount() > 1 )
{ {
aux_msg.Printf( _( " in part %c" ), 'A' + curr_pin->m_Unit ); aux_msg.Printf( _( " in part %c" ), 'A' + curr_pin->GetUnit() );
msg += aux_msg; msg += aux_msg;
} }
if( m_showDeMorgan ) if( m_showDeMorgan )
{ {
if( curr_pin->m_Convert ) if( curr_pin->GetConvert() )
msg += _( " of converted" ); msg += _( " of converted" );
else else
msg += _( " of normal" ); msg += _( " of normal" );
@ -752,13 +752,13 @@ void WinEDA_LibeditFrame::OnCheckComponent( wxCommandEvent& event )
if( m_component->GetPartCount() > 1 ) if( m_component->GetPartCount() > 1 )
{ {
aux_msg.Printf( _( " in part %c" ), 'A' + Pin->m_Unit ); aux_msg.Printf( _( " in part %c" ), 'A' + Pin->GetUnit() );
msg += aux_msg; msg += aux_msg;
} }
if( m_showDeMorgan ) if( m_showDeMorgan )
{ {
if( Pin->m_Convert ) if( Pin->GetConvert() )
msg += _( " of converted" ); msg += _( " of converted" );
else else
msg += _( " of normal" ); msg += _( " of normal" );

View File

@ -637,7 +637,7 @@ void WinEDA_SchematicFrame::Process_Special_Functions( wxCommandEvent& event )
if( screen->GetCurItem() == NULL ) if( screen->GetCurItem() == NULL )
break; break;
{ {
CMP_LIB_ENTRY* LibEntry; LIB_ALIAS* LibEntry;
LibEntry = CMP_LIBRARY::FindLibraryEntry( LibEntry = CMP_LIBRARY::FindLibraryEntry(
( (SCH_COMPONENT*) screen->GetCurItem() )->m_ChipName ); ( (SCH_COMPONENT*) screen->GetCurItem() )->m_ChipName );

View File

@ -36,7 +36,7 @@ void WinEDA_LibeditFrame::EditGraphicSymbol( wxDC* DC, LIB_DRAW_ITEM* DrawItem )
LIB_COMPONENT* component = DrawItem->GetParent(); LIB_COMPONENT* component = DrawItem->GetParent();
DIALOG_LIB_EDIT_DRAW_ITEM dialog( this, DrawItem->m_typeName ); DIALOG_LIB_EDIT_DRAW_ITEM dialog( this, DrawItem->GetTypeName() );
dialog.SetWidthUnits( ReturnUnitSymbol( g_UserUnit ) ); dialog.SetWidthUnits( ReturnUnitSymbol( g_UserUnit ) );
@ -47,7 +47,7 @@ void WinEDA_LibeditFrame::EditGraphicSymbol( wxDC* DC, LIB_DRAW_ITEM* DrawItem )
dialog.SetApplyToAllConversions( !m_drawSpecificConvert ); dialog.SetApplyToAllConversions( !m_drawSpecificConvert );
dialog.EnableApplyToAllConversions( component && component->HasConversion() ); dialog.EnableApplyToAllConversions( component && component->HasConversion() );
// dialog.SetFillStyle( m_drawFillStyle ); // could better to show the current setting // dialog.SetFillStyle( m_drawFillStyle ); // could better to show the current setting
dialog.SetFillStyle( DrawItem->m_Fill); dialog.SetFillStyle( DrawItem->GetFillMode() );
dialog.EnableFillStyle( DrawItem->IsFillable() ); dialog.EnableFillStyle( DrawItem->IsFillable() );
if( dialog.ShowModal() == wxID_CANCEL ) if( dialog.ShowModal() == wxID_CANCEL )
@ -73,17 +73,17 @@ void WinEDA_LibeditFrame::EditGraphicSymbol( wxDC* DC, LIB_DRAW_ITEM* DrawItem )
SaveCopyInUndoList( DrawItem->GetParent() ); SaveCopyInUndoList( DrawItem->GetParent() );
if( m_drawSpecificUnit ) if( m_drawSpecificUnit )
DrawItem->m_Unit = GetUnit(); DrawItem->SetUnit( GetUnit() );
else else
DrawItem->m_Unit = 0; DrawItem->SetUnit( 0 );
if( m_drawSpecificConvert ) if( m_drawSpecificConvert )
DrawItem->m_Convert = GetConvert(); DrawItem->SetConvert( GetConvert() );
else else
DrawItem->m_Convert = 0; DrawItem->SetConvert( 0 );
if( DrawItem->IsFillable() ) if( DrawItem->IsFillable() )
DrawItem->m_Fill = (FILL_T) dialog.GetFillStyle(); DrawItem->SetFillMode( (FILL_T) dialog.GetFillStyle() );
DrawItem->SetWidth( m_drawLineWidth ); DrawItem->SetWidth( m_drawLineWidth );
@ -183,12 +183,12 @@ LIB_DRAW_ITEM* WinEDA_LibeditFrame::CreateGraphicItem( LIB_COMPONENT* LibEntry,
{ {
m_drawItem->BeginEdit( IS_NEW, drawPos ); m_drawItem->BeginEdit( IS_NEW, drawPos );
m_drawItem->SetWidth( m_drawLineWidth ); m_drawItem->SetWidth( m_drawLineWidth );
m_drawItem->m_Fill = m_drawFillStyle; m_drawItem->SetFillMode( m_drawFillStyle );
if( m_drawSpecificUnit ) if( m_drawSpecificUnit )
m_drawItem->m_Unit = m_unit; m_drawItem->SetUnit( m_unit );
if( m_drawSpecificConvert ) if( m_drawSpecificConvert )
m_drawItem->m_Convert = m_convert; m_drawItem->SetConvert( m_convert );
// Draw initial symbol: // Draw initial symbol:
DrawPanel->ManageCurseur( DrawPanel, DC, false ); DrawPanel->ManageCurseur( DrawPanel, DC, false );
@ -253,8 +253,8 @@ void WinEDA_LibeditFrame::StartMoveDrawSymbol( wxDC* DC )
SetCursor( wxCURSOR_HAND ); SetCursor( wxCURSOR_HAND );
if( m_drawItem->m_Unit != m_unit ) if( m_drawItem->GetUnit() != m_unit )
m_drawItem->m_Unit = m_unit; m_drawItem->SetUnit( m_unit );
TempCopyComponent(); TempCopyComponent();
m_drawItem->BeginEdit( IS_MOVED, GetScreen()->GetCursorDrawPosition() ); m_drawItem->BeginEdit( IS_MOVED, GetScreen()->GetCursorDrawPosition() );

View File

@ -91,10 +91,10 @@ void WinEDA_LibeditFrame::LoadOneSymbol( void )
{ {
if( item.Type() == COMPONENT_FIELD_DRAW_TYPE ) if( item.Type() == COMPONENT_FIELD_DRAW_TYPE )
continue; continue;
if( item.m_Unit ) if( item.GetUnit() )
item.m_Unit = m_unit; item.SetUnit( m_unit );
if( item.m_Convert ) if( item.GetConvert() )
item.m_Convert = m_convert; item.SetConvert( m_convert );
item.m_Flags = IS_NEW; item.m_Flags = IS_NEW;
item.m_Selected = IS_SELECTED; item.m_Selected = IS_SELECTED;
@ -202,9 +202,9 @@ void WinEDA_LibeditFrame::SaveOneSymbol()
if( item.Type() == COMPONENT_FIELD_DRAW_TYPE ) if( item.Type() == COMPONENT_FIELD_DRAW_TYPE )
continue; continue;
/* Don't save unused parts or alternate body styles. */ /* Don't save unused parts or alternate body styles. */
if( m_unit && item.m_Unit && ( item.m_Unit != m_unit ) ) if( m_unit && item.GetUnit() && ( item.GetUnit() != m_unit ) )
continue; continue;
if( m_convert && item.m_Convert && ( item.m_Convert != m_convert ) ) if( m_convert && item.GetConvert() && ( item.GetConvert() != m_convert ) )
continue; continue;
if( !item.Save( file.fp() ) ) if( !item.Save( file.fp() ) )

View File

@ -17,16 +17,16 @@
void WinEDA_ViewlibFrame::ReCreateHToolbar() void WinEDA_ViewlibFrame::ReCreateHToolbar()
{ {
int ii; wxString msg; int ii;
wxString msg;
CMP_LIBRARY* lib; CMP_LIBRARY* lib;
LIB_COMPONENT* component = NULL; LIB_COMPONENT* component = NULL;
CMP_LIB_ENTRY* entry = NULL; LIB_ALIAS* entry = NULL;
bool asdeMorgan = false; bool asdeMorgan = false;
if( m_HToolBar == NULL ) if( m_HToolBar == NULL )
{ {
m_HToolBar = new WinEDA_Toolbar( TOOLBAR_MAIN, this, ID_H_TOOLBAR, m_HToolBar = new WinEDA_Toolbar( TOOLBAR_MAIN, this, ID_H_TOOLBAR, true );
true );
// Set up toolbar // Set up toolbar
m_HToolBar->AddTool( ID_LIBVIEW_SELECT_LIB, wxEmptyString, m_HToolBar->AddTool( ID_LIBVIEW_SELECT_LIB, wxEmptyString,
@ -105,8 +105,7 @@ void WinEDA_ViewlibFrame::ReCreateHToolbar()
m_HToolBar->Realize(); m_HToolBar->Realize();
} }
if( (m_libraryName != wxEmptyString) if( (m_libraryName != wxEmptyString) && (m_entryName != wxEmptyString) )
&& (m_entryName != wxEmptyString) )
{ {
lib = CMP_LIBRARY::FindLibrary( m_libraryName ); lib = CMP_LIBRARY::FindLibrary( m_libraryName );

View File

@ -26,7 +26,7 @@
void WinEDA_ViewlibFrame::Process_Special_Functions( wxCommandEvent& event ) void WinEDA_ViewlibFrame::Process_Special_Functions( wxCommandEvent& event )
{ {
wxString msg; wxString msg;
CMP_LIB_ENTRY* LibEntry; LIB_ALIAS* LibEntry;
int ii, id = event.GetId(); int ii, id = event.GetId();
switch( id ) switch( id )
@ -48,8 +48,7 @@ void WinEDA_ViewlibFrame::Process_Special_Functions( wxCommandEvent& event )
break; break;
case ID_LIBVIEW_VIEWDOC: case ID_LIBVIEW_VIEWDOC:
LibEntry = CMP_LIBRARY::FindLibraryEntry( m_entryName, LibEntry = CMP_LIBRARY::FindLibraryEntry( m_entryName, m_libraryName );
m_libraryName );
if( LibEntry && ( !LibEntry->GetDocFileName().IsEmpty() ) ) if( LibEntry && ( !LibEntry->GetDocFileName().IsEmpty() ) )
GetAssociatedDocument( this, LibEntry->GetDocFileName(), GetAssociatedDocument( this, LibEntry->GetDocFileName(),
@ -168,7 +167,7 @@ void WinEDA_ViewlibFrame::SelectAndViewLibraryPart( int option )
return; return;
} }
CMP_LIB_ENTRY* LibEntry = Lib->FindEntry( m_entryName ); LIB_ALIAS* LibEntry = Lib->FindEntry( m_entryName );
if( LibEntry == NULL ) if( LibEntry == NULL )
return; return;
@ -187,7 +186,7 @@ void WinEDA_ViewlibFrame::SelectAndViewLibraryPart( int option )
void WinEDA_ViewlibFrame::ViewOneLibraryContent( CMP_LIBRARY* Lib, int Flag ) void WinEDA_ViewlibFrame::ViewOneLibraryContent( CMP_LIBRARY* Lib, int Flag )
{ {
int NumOfParts = 0; int NumOfParts = 0;
CMP_LIB_ENTRY* LibEntry; LIB_ALIAS* LibEntry;
wxString CmpName; wxString CmpName;
if( Lib ) if( Lib )
@ -249,7 +248,7 @@ void WinEDA_ViewlibFrame::ViewOneLibraryContent( CMP_LIBRARY* Lib, int Flag )
void WinEDA_ViewlibFrame::RedrawActiveWindow( wxDC* DC, bool EraseBg ) void WinEDA_ViewlibFrame::RedrawActiveWindow( wxDC* DC, bool EraseBg )
{ {
LIB_COMPONENT* component; LIB_COMPONENT* component;
CMP_LIB_ENTRY* entry; LIB_ALIAS* entry;
CMP_LIBRARY* lib; CMP_LIBRARY* lib;
wxString msg; wxString msg;
wxString tmp; wxString tmp;
@ -266,22 +265,17 @@ void WinEDA_ViewlibFrame::RedrawActiveWindow( wxDC* DC, bool EraseBg )
if( entry == NULL ) if( entry == NULL )
return; return;
wxCHECK_RET( entry->isAlias(), component = entry->GetComponent();
wxT( "Entry \"" ) + entry->GetName() + wxT( "\" found in library <" ) +
lib->GetName() + wxT( "> is not a LIB_ALIAS object." ) );
LIB_ALIAS* alias = (LIB_ALIAS*) entry;
component = alias->GetComponent();
DrawPanel->DrawBackGround( DC ); DrawPanel->DrawBackGround( DC );
if( !alias->IsRoot() ) if( !entry->IsRoot() )
{ {
if( component == NULL ) // Should not occur if( component == NULL ) // Should not occur
return; return;
// Temporarily change the name field text to reflect the alias name. // Temporarily change the name field text to reflect the alias name.
msg = alias->GetName(); msg = entry->GetName();
tmp = component->GetName(); tmp = component->GetName();
component->SetName( msg ); component->SetName( msg );

View File

@ -71,7 +71,8 @@ enum KICAD_T {
* If you add a new draw item, type, please make sure you add it so the * If you add a new draw item, type, please make sure you add it so the
* sort order is logical. * sort order is logical.
*/ */
LIBCOMPONENT_STRUCT_TYPE, LIB_COMPONENT_T,
LIB_ALIAS_T,
COMPONENT_ARC_DRAW_TYPE, COMPONENT_ARC_DRAW_TYPE,
COMPONENT_CIRCLE_DRAW_TYPE, COMPONENT_CIRCLE_DRAW_TYPE,
COMPONENT_GRAPHIC_TEXT_DRAW_TYPE, COMPONENT_GRAPHIC_TEXT_DRAW_TYPE,
@ -270,20 +271,13 @@ class DHEAD;
#define STARTPOINT (1 << 9) #define STARTPOINT (1 << 9)
#define ENDPOINT (1 << 10) #define ENDPOINT (1 << 10)
#define SELECTED (1 << 11) #define SELECTED (1 << 11)
#define SELECTEDNODE (1 << 12) ///< flag indicating that the structure #define SELECTEDNODE (1 << 12) ///< flag indicating that the structure has already selected
// has already selected #define STRUCT_DELETED (1 << 13) ///< flag indication structures to be erased
#define CANDIDATE (1 << 14) ///< flag indicating that the structure is connected
#define STRUCT_DELETED (1 << 13) ///< flag indication structures to be #define SKIP_STRUCT (1 << 15) ///< flag indicating that the structure should be ignored
// erased
#define CANDIDATE (1 << 14) ///< flag indicating that the structure
// is connected
#define SKIP_STRUCT (1 << 15) ///< flag indicating that the structure
// should be ignored
#define DO_NOT_DRAW (1 << 16) ///< Used to disable draw function #define DO_NOT_DRAW (1 << 16) ///< Used to disable draw function
#define IS_CANCELLED (1 << 17) ///< flag set when edit dialogs are #define IS_CANCELLED (1 << 17) ///< flag set when edit dialogs are canceled when editing a
// canceled when editing a new object ///< new object
class EDA_BaseStruct class EDA_BaseStruct
{ {
@ -350,6 +344,10 @@ public:
void SetSon( EDA_BaseStruct* aSon ) { m_Son = aSon; } void SetSon( EDA_BaseStruct* aSon ) { m_Son = aSon; }
void SetList( DHEAD* aList ) { m_List = aList; } void SetList( DHEAD* aList ) { m_List = aList; }
inline bool IsNew() const { return m_Flags & IS_NEW; }
inline bool IsModified() const { return m_Flags & IS_CHANGED; }
inline bool IsMoving() const { return m_Flags & IS_MOVED; }
inline bool IsDragging() const { return m_Flags & IS_DRAGGED; }
int GetState( int type ) const int GetState( int type ) const
{ {

View File

@ -20,7 +20,6 @@ class SCH_ITEM;
class SCH_NO_CONNECT; class SCH_NO_CONNECT;
class CMP_LIBRARY; class CMP_LIBRARY;
class LIB_COMPONENT; class LIB_COMPONENT;
class CMP_LIB_ENTRY;
class LIB_DRAW_ITEM; class LIB_DRAW_ITEM;
class EDA_BaseStruct; class EDA_BaseStruct;
class SCH_BUS_ENTRY; class SCH_BUS_ENTRY;