Commit 762e625c authored by jean-pierre charras's avatar jean-pierre charras

Fixed bugs #568896 and #569312 and minor code cleaning

parents c58c388a 1ca9cbe5
This diff is collapsed.
......@@ -230,6 +230,22 @@ LIB_COMPONENT::~LIB_COMPONENT()
{
}
/** function IsMulti
* @return the sub reference for component having multiple parts per package.
* The sub reference identify the part (or unit)
* @param aUnit = the part identifier ( 1 to 26)
*/
wxString LIB_COMPONENT::ReturnSubReference( int aUnit )
{
wxString subRef;
#if defined(KICAD_GOST)
subRef.Printf( wxT(".%d" ), aUnit);
#else
subRef.Append( aUnit + 'A' - 1 );
#endif
return subRef;
}
void LIB_COMPONENT::Draw( WinEDA_DrawPanel* aPanel, wxDC* aDc,
const wxPoint& aOffset, int aMulti,
......
......@@ -575,6 +575,20 @@ public:
int GetPartCount() { return unitCount; }
/** function IsMulti
* @return true if the component has multiple parts per package.
* When happens, the reference has a sub reference ti identify part
*/
bool IsMulti() { return unitCount > 1; }
/** function IsMulti
* @return the sub reference for component having multiple parts per package.
* The sub reference identify the part (or unit)
* @param aUnit = the part identifier ( 1 to max count)
* Note: this is a static function.
*/
static wxString ReturnSubReference( int aUnit );
/**
* Set or clear the alternate body style (DeMorgan) for the component.
*
......
......@@ -502,21 +502,11 @@ wxString LIB_FIELD::GetFullText( int unit )
return m_Text;
wxString text = m_Text;
if( GetParent()->GetPartCount() > 1 )
{
#if defined(KICAD_GOST)
text.Printf( wxT( "%s?.%c" ),
m_Text.GetData(), unit + '1' - 1 );
#else
text.Printf( wxT( "%s?%c" ),
m_Text.GetData(), unit + 'A' - 1 );
#endif
}
else
text << wxT( "?" );
if( GetParent()->IsMulti() )
text << LIB_COMPONENT::ReturnSubReference( unit );
return text;
}
......
......@@ -140,14 +140,7 @@ void SCH_FIELD::Draw( WinEDA_DrawPanel* panel, wxDC* DC,
/* For more than one part per package, we must add the part selection
* A, B, ... or 1, 2, .. to the reference. */
wxString fulltext = m_Text;
char part_id;
#if defined(KICAD_GOST)
fulltext.Append( '.' );
part_id = '1' - 1 + parentComponent->m_Multi;
#else
part_id = 'A' - 1 + parentComponent->m_Multi;
#endif
fulltext.Append( part_id );
fulltext << LIB_COMPONENT::ReturnSubReference( parentComponent->m_Multi );
DrawGraphicText( panel, DC, textpos, color, fulltext,
orient,
......@@ -432,13 +425,7 @@ bool SCH_FIELD::Matches( wxFindReplaceData& aSearchData, void * aAuxData )
/* For more than one part per package, we must add the part selection
* A, B, ... or 1, 2, .. to the reference. */
int part_id = pSch->GetUnitSelection( sheet );
#if defined(KICAD_GOST)
fulltext.Append( '.' );
part_id += '1' - 1;
#else
part_id += 'A' - 1;
#endif
fulltext.Append( (char)part_id );
fulltext << LIB_COMPONENT::ReturnSubReference( part_id );
}
return SCH_ITEM::Matches( fulltext, aSearchData );
}
......
......@@ -34,7 +34,8 @@ private:
bool CompactForm, bool aIncludeSubComponents );
int PrintComponentsListByVal( FILE *f, std::vector <OBJ_CMP_TO_LIST>& aList,
bool aIncludeSubComponents);
int PrintComponentsListByPart( FILE *f, std::vector <OBJ_CMP_TO_LIST>& aList);
int PrintComponentsListByPart( FILE *f, std::vector <OBJ_CMP_TO_LIST>& aList,
bool aIncludeSubComponents);
void PrintFieldData(FILE * f, SCH_COMPONENT * DrawLibItem, bool CompactForm = FALSE);
bool IsFieldChecked(int aFieldId);
......
......@@ -21,7 +21,7 @@
static void Plot_Hierarchical_PIN_Sheet( PLOTTER* plotter,
SCH_SHEET_PIN* Struct );
static void PlotTextField( PLOTTER* plotter, SCH_COMPONENT* DrawLibItem,
int FieldNumber, int IsMulti, int DrawMode );
int FieldNumber, bool IsMulti, int DrawMode );
static void PlotNoConnectStruct( PLOTTER* plotter, SCH_NO_CONNECT* Struct )
......@@ -53,10 +53,10 @@ static void PlotLibPart( PLOTTER* plotter, SCH_COMPONENT* DrawLibItem )
Entry->Plot( plotter, DrawLibItem->m_Multi, DrawLibItem->m_Convert,
DrawLibItem->m_Pos, TransMat );
for( int i = 0; i < NUMBER_OF_FIELDS; i++ )
bool isMulti = Entry->GetPartCount() > 1;
for( int fieldId = 0; fieldId < NUMBER_OF_FIELDS; fieldId++ )
{
PlotTextField( plotter, DrawLibItem, i, 0, 0 );
PlotTextField( plotter, DrawLibItem, fieldId, isMulti, 0 );
}
}
......@@ -65,13 +65,13 @@ static void PlotLibPart( PLOTTER* plotter, SCH_COMPONENT* DrawLibItem )
* Input:
* DrawLibItem: pointer to the component
* FieldNumber: Number Field
* IsMulti: No Null flag if there are several sides by housing.
* IsMulti: true flag if there are several parts per package.
* Only useful for the field to add a reference to this one
* The identification from (A, B ...)
* DrawMode: trace mode
*/
static void PlotTextField( PLOTTER* plotter, SCH_COMPONENT* DrawLibItem,
int FieldNumber, int IsMulti, int DrawMode )
int FieldNumber, bool IsMulti, int DrawMode )
{
SCH_FIELD* field = DrawLibItem->GetField( FieldNumber );
EDA_Colors color = UNSPECIFIED_COLOR;
......@@ -125,15 +125,7 @@ static void PlotTextField( PLOTTER* plotter, SCH_COMPONENT* DrawLibItem,
{
/* Adding A, B ... to the reference */
wxString Text;
Text = field->m_Text;
char unit_id;
#if defined(KICAD_GOST)
Text.Append( '.' );
unit_id = '1' - 1 + DrawLibItem->m_Multi;
#else
unit_id = 'A' - 1 + DrawLibItem->m_Multi;
#endif
Text.Append( unit_id );
Text = field->m_Text + LIB_COMPONENT::ReturnSubReference( DrawLibItem->m_Multi );
plotter->text( textpos, color, Text,
orient,
field->m_Size, hjustify, vjustify,
......
......@@ -70,7 +70,7 @@ void DIALOG_NETLIST::OnOpenNelistClick( wxCommandEvent& event )
{
wxFileName fn = lastNetlistRead;
lastPath = fn.GetPath();
lastNetlistRead = fn.GetName();
lastNetlistRead = fn.GetFullName();
}
wxLogDebug( wxT( "Last net list read path <%s>, file name <%s>." ),
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment