Commit d38c9b20 authored by jean-pierre charras's avatar jean-pierre charras

Extend max number of units per package: fix incorrect unit string for unit >=...

Extend max number of units per package: fix incorrect unit string for unit >= 52. Fix unit list limited to 26 in dialof edit compinent in schematic..cpp
lib_pin.cpp: in 4 functions, use an unsigned param instead of int, for  a better code.
parent 17297bab
...@@ -284,15 +284,16 @@ wxString LIB_PART::SubReference( int aUnit, bool aAddSeparator ) ...@@ -284,15 +284,16 @@ wxString LIB_PART::SubReference( int aUnit, bool aAddSeparator )
// use one letter if letter = A .. Z or a ... z, and 2 letters otherwise // use one letter if letter = A .. Z or a ... z, and 2 letters otherwise
// first letter is expected to be 'A' or 'a' (i.e. 26 letters are available) // first letter is expected to be 'A' or 'a' (i.e. 26 letters are available)
int u; int u;
aUnit -= 1; // Unit number starts to 1. now to 0.
while( aUnit > 26 ) // more than one letter are needed while( aUnit >= 26 ) // more than one letter are needed
{ {
u = aUnit / 26; u = aUnit / 26;
subRef << wxChar( m_subpartFirstId + u -1 ); subRef << wxChar( m_subpartFirstId + u -1 );
aUnit %= 26; aUnit %= 26;
} }
u = m_subpartFirstId + aUnit - 1; u = m_subpartFirstId + aUnit;
subRef << wxChar( u ); subRef << wxChar( u );
} }
......
...@@ -958,14 +958,11 @@ void DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::copyOptionsToPanel() ...@@ -958,14 +958,11 @@ void DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::copyOptionsToPanel()
if( unitcount < 1 ) if( unitcount < 1 )
unitcount = 1; unitcount = 1;
if( unitcount > 26 )
unitcount = 26;
unitChoice->Clear(); unitChoice->Clear();
for( int ii=0; ii < unitcount; ii++ ) for( int ii = 1; ii <= unitcount; ii++ )
{ {
unitChoice->Append( wxString::Format( "%c", "?ABCDEFGHIJKLMNOPQRSTUVWXYZ"[ ii + 1 ] ) ); unitChoice->Append( LIB_PART::SubReference( ii, false ) );
} }
// For components with multiple parts per package, set the unit selection // For components with multiple parts per package, set the unit selection
......
...@@ -40,6 +40,13 @@ ...@@ -40,6 +40,13 @@
*/ */
#define MAX_SELECT_ITEM_IDS 10 #define MAX_SELECT_ITEM_IDS 10
/**
* The maximum number of units per package.
* Increase this number if that ever becomes a problem, but remember
* the popup menu to select a given unit could be not easy to use.
*/
#define MAX_UNIT_COUNT_PER_PACKAGE 64
/** /**
* Command IDs for the schematic editor. * Command IDs for the schematic editor.
...@@ -129,8 +136,10 @@ enum id_eeschema_frm ...@@ -129,8 +136,10 @@ enum id_eeschema_frm
// Unit select context menus command IDs. // Unit select context menus command IDs.
ID_POPUP_SCH_SELECT_UNIT_CMP, ID_POPUP_SCH_SELECT_UNIT_CMP,
ID_POPUP_SCH_SELECT_UNIT1, ID_POPUP_SCH_SELECT_UNIT1,
// ... leave room for 52 IDs , to select one unit among 52 in popup menu // ... leave room for MAX_UNIT_COUNT_PER_PACKAGE IDs ,
ID_POPUP_SCH_SELECT_UNIT_CMP_MAX = ID_POPUP_SCH_SELECT_UNIT1 + 52, // to select one unit among MAX_UNIT_COUNT_PER_PACKAGE in popup menu
ID_POPUP_SCH_SELECT_UNIT_CMP_MAX = ID_POPUP_SCH_SELECT_UNIT1
+ MAX_UNIT_COUNT_PER_PACKAGE,
// Change text type context menu command IDs. // Change text type context menu command IDs.
ID_POPUP_SCH_CHANGE_TYPE_TEXT, ID_POPUP_SCH_CHANGE_TYPE_TEXT,
......
...@@ -122,7 +122,7 @@ static const BITMAP_DEF iconsPinsElectricalType[] = ...@@ -122,7 +122,7 @@ static const BITMAP_DEF iconsPinsElectricalType[] =
#define PIN_ELECTRICAL_TYPE_CNT DIM( iconsPinsElectricalType ) #define PIN_ELECTRICAL_TYPE_CNT DIM( iconsPinsElectricalType )
const wxString LIB_PIN::GetCanonicalElectricalTypeName( int aType ) const wxString LIB_PIN::GetCanonicalElectricalTypeName( unsigned aType )
{ {
// These strings are the canonical name of the electrictal type // These strings are the canonical name of the electrictal type
// Not translated, no space in name, only ASCII chars. // Not translated, no space in name, only ASCII chars.
...@@ -144,7 +144,7 @@ const wxString LIB_PIN::GetCanonicalElectricalTypeName( int aType ) ...@@ -144,7 +144,7 @@ const wxString LIB_PIN::GetCanonicalElectricalTypeName( int aType )
wxT( "???" ) wxT( "???" )
}; };
if( aType < 0 || aType > int( PIN_NMAX ) ) if( aType > PIN_NMAX )
aType = PIN_NMAX; aType = PIN_NMAX;
return msgPinElectricType[ aType ]; return msgPinElectricType[ aType ];
...@@ -155,7 +155,7 @@ const wxString LIB_PIN::GetCanonicalElectricalTypeName( int aType ) ...@@ -155,7 +155,7 @@ const wxString LIB_PIN::GetCanonicalElectricalTypeName( int aType )
// Note: the strings are *not* static because they are translated and must be built // Note: the strings are *not* static because they are translated and must be built
// on the fly, to be properly translated // on the fly, to be properly translated
static const wxString getPinOrientationName( int aPinOrientationCode ) static const wxString getPinOrientationName( unsigned aPinOrientationCode )
{ {
/* Note: The following name lists are sentence capitalized per the GNOME UI /* Note: The following name lists are sentence capitalized per the GNOME UI
* standards for list controls. Please do not change the capitalization * standards for list controls. Please do not change the capitalization
...@@ -170,13 +170,13 @@ static const wxString getPinOrientationName( int aPinOrientationCode ) ...@@ -170,13 +170,13 @@ static const wxString getPinOrientationName( int aPinOrientationCode )
wxT( "???" ) wxT( "???" )
}; };
if( aPinOrientationCode < 0 || aPinOrientationCode > int( PIN_ORIENTATION_CNT ) ) if( aPinOrientationCode > PIN_ORIENTATION_CNT )
aPinOrientationCode = PIN_ORIENTATION_CNT; aPinOrientationCode = PIN_ORIENTATION_CNT;
return pin_orientation_names[ aPinOrientationCode ]; return pin_orientation_names[ aPinOrientationCode ];
} }
const wxString LIB_PIN::GetElectricalTypeName( int aPinsElectricalType ) const wxString LIB_PIN::GetElectricalTypeName( unsigned aPinsElectricalType )
{ {
const wxString pin_electrical_type_names[] = const wxString pin_electrical_type_names[] =
{ // Keep these translated strings not static { // Keep these translated strings not static
...@@ -194,13 +194,13 @@ const wxString LIB_PIN::GetElectricalTypeName( int aPinsElectricalType ) ...@@ -194,13 +194,13 @@ const wxString LIB_PIN::GetElectricalTypeName( int aPinsElectricalType )
wxT( "???" ) wxT( "???" )
}; };
if( aPinsElectricalType < 0 || aPinsElectricalType > int( PIN_ELECTRICAL_TYPE_CNT ) ) if( aPinsElectricalType > PIN_ELECTRICAL_TYPE_CNT )
aPinsElectricalType = PIN_ELECTRICAL_TYPE_CNT; aPinsElectricalType = PIN_ELECTRICAL_TYPE_CNT;
return pin_electrical_type_names[ aPinsElectricalType ]; return pin_electrical_type_names[ aPinsElectricalType ];
} }
static const wxString getPinStyleName( int aPinsStyle ) static const wxString getPinStyleName( unsigned aPinsStyle )
{ {
const wxString pin_style_names[] = const wxString pin_style_names[] =
{ // Keep these translated strings not static { // Keep these translated strings not static
...@@ -216,7 +216,7 @@ static const wxString getPinStyleName( int aPinsStyle ) ...@@ -216,7 +216,7 @@ static const wxString getPinStyleName( int aPinsStyle )
wxT( "???" ) wxT( "???" )
}; };
if( aPinsStyle < 0 || aPinsStyle > int( PIN_STYLE_CNT ) ) if( aPinsStyle > PIN_STYLE_CNT )
aPinsStyle = PIN_STYLE_CNT; aPinsStyle = PIN_STYLE_CNT;
return pin_style_names[ aPinsStyle ]; return pin_style_names[ aPinsStyle ];
...@@ -1979,6 +1979,7 @@ void LIB_PIN::GetMsgPanelInfo( MSG_PANEL_ITEMS& aList ) ...@@ -1979,6 +1979,7 @@ void LIB_PIN::GetMsgPanelInfo( MSG_PANEL_ITEMS& aList )
RED ) ); RED ) );
int styleCodeIndex = GetStyleCodeIndex( m_shape ); int styleCodeIndex = GetStyleCodeIndex( m_shape );
if( styleCodeIndex >= 0 ) if( styleCodeIndex >= 0 )
text = getPinStyleName( styleCodeIndex ); text = getPinStyleName( styleCodeIndex );
else else
...@@ -1997,7 +1998,7 @@ void LIB_PIN::GetMsgPanelInfo( MSG_PANEL_ITEMS& aList ) ...@@ -1997,7 +1998,7 @@ void LIB_PIN::GetMsgPanelInfo( MSG_PANEL_ITEMS& aList )
text = StringFromValue( g_UserUnit, m_length, true ); text = StringFromValue( g_UserUnit, m_length, true );
aList.push_back( MSG_PANEL_ITEM( _( "Length" ), text, MAGENTA ) ); aList.push_back( MSG_PANEL_ITEM( _( "Length" ), text, MAGENTA ) );
text = getPinOrientationName( GetOrientationCodeIndex( m_orientation ) ); text = getPinOrientationName( (unsigned) GetOrientationCodeIndex( m_orientation ) );
aList.push_back( MSG_PANEL_ITEM( _( "Orientation" ), text, DARKMAGENTA ) ); aList.push_back( MSG_PANEL_ITEM( _( "Orientation" ), text, DARKMAGENTA ) );
} }
......
...@@ -272,7 +272,7 @@ public: ...@@ -272,7 +272,7 @@ public:
* @param aType is the electrical type (see enum ElectricPinType ) * @param aType is the electrical type (see enum ElectricPinType )
* @return The electrical name for a pin type (see enun MsgPinElectricType for names). * @return The electrical name for a pin type (see enun MsgPinElectricType for names).
*/ */
static const wxString GetCanonicalElectricalTypeName( int aType ); static const wxString GetCanonicalElectricalTypeName( unsigned aType );
/** /**
* return a string giving the electrical type of the pin. * return a string giving the electrical type of the pin.
...@@ -289,7 +289,7 @@ public: ...@@ -289,7 +289,7 @@ public:
* @param aType is the electrical type (see enum ElectricPinType ) * @param aType is the electrical type (see enum ElectricPinType )
* @return The electrical name of the pin (see enun MsgPinElectricType for names). * @return The electrical name of the pin (see enun MsgPinElectricType for names).
*/ */
static const wxString GetElectricalTypeName( int aType ); static const wxString GetElectricalTypeName( unsigned aType );
/** /**
* return a translated string for messages giving the electrical type of the pin. * return a translated string for messages giving the electrical type of the pin.
......
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