mirror of
https://gitlab.com/kicad/code/kicad.git
synced 2025-09-13 17:53:11 +02:00
ADDED: custom body styles.
(Also moves editing of unit display names to the Symbol Properties dialog and retires the Set Unit Display Name dialog.) Fixes https://gitlab.com/kicad/code/kicad/-/issues/16069 Fixes https://gitlab.com/kicad/code/kicad/-/issues/14843
This commit is contained in:
parent
3eb6caaec6
commit
6dd4e01f16
@ -1039,5 +1039,9 @@ ACTION_TOOLBAR_CONTROL ACTION_TOOLBAR_CONTROLS::layerSelector( "control.LayerSel
|
||||
ACTION_TOOLBAR_CONTROL ACTION_TOOLBAR_CONTROLS::unitSelector( "control.UnitSelector", _( "Symbol unit selector" ),
|
||||
_( "Displays the current unit" ) );
|
||||
|
||||
ACTION_TOOLBAR_CONTROL ACTION_TOOLBAR_CONTROLS::bodyStyleSelector( "control.BodyStyleSelector",
|
||||
_( "Symbol body style selector" ),
|
||||
_( "Displays the current body style" ) );
|
||||
|
||||
ACTION_TOOLBAR_CONTROL ACTION_TOOLBAR_CONTROLS::overrideLocks( "control.OverrideLocks", _( "Override locks" ),
|
||||
_( "Allow moving of locked items with the mouse" ) );
|
@ -306,7 +306,7 @@ void DIALOG_FIELD_PROPERTIES::init()
|
||||
bool showUnitSelector = m_fieldId == FIELD_T::REFERENCE
|
||||
&& m_field->GetParentSymbol()
|
||||
&& m_field->GetParentSymbol()->Type() == SCH_SYMBOL_T
|
||||
&& m_field->GetParentSymbol()->IsMulti();
|
||||
&& m_field->GetParentSymbol()->IsMultiUnit();
|
||||
|
||||
m_unitLabel->Show( showUnitSelector );
|
||||
m_unitChoice->Show( showUnitSelector );
|
||||
|
@ -56,11 +56,6 @@
|
||||
#define BOOL_TRUE _HKI( "True" )
|
||||
#define BOOL_FALSE _HKI( "False" )
|
||||
|
||||
#define UNITS_ALL _HKI( "ALL" )
|
||||
#define DEMORGAN_ALL _HKI( "ALL" )
|
||||
#define DEMORGAN_STD _HKI( "Standard" )
|
||||
#define DEMORGAN_ALT _HKI( "Alternate" )
|
||||
|
||||
|
||||
/**
|
||||
* Get the label for a given column in the pin table.
|
||||
@ -84,7 +79,7 @@ static wxString GetPinTableColLabel( int aCol )
|
||||
case COL_POSY: return _HKI( "Y Position" );
|
||||
case COL_VISIBLE: return _HKI( "Visible" );
|
||||
case COL_UNIT: return _HKI( "Unit" );
|
||||
case COL_DEMORGAN: return _HKI( "De Morgan" );
|
||||
case COL_BODY_STYLE: return _HKI( "Body Style" );
|
||||
default: wxFAIL; return wxEmptyString;
|
||||
}
|
||||
}
|
||||
@ -131,71 +126,64 @@ public:
|
||||
|
||||
wxString Format( const SCH_PIN& aPin, int aFieldId ) const
|
||||
{
|
||||
wxString val;
|
||||
switch( aFieldId )
|
||||
{
|
||||
case COL_NAME:
|
||||
val << aPin.GetName();
|
||||
break;
|
||||
return aPin.GetName();
|
||||
|
||||
case COL_NUMBER:
|
||||
val << aPin.GetNumber();
|
||||
break;
|
||||
return aPin.GetNumber();
|
||||
|
||||
case COL_TYPE:
|
||||
val << PinTypeNames()[static_cast<int>( aPin.GetType() )];
|
||||
break;
|
||||
return PinTypeNames()[static_cast<int>( aPin.GetType() )];
|
||||
|
||||
case COL_SHAPE:
|
||||
val << PinShapeNames()[static_cast<int>( aPin.GetShape() )];
|
||||
break;
|
||||
return PinShapeNames()[static_cast<int>( aPin.GetShape() )];
|
||||
|
||||
case COL_ORIENTATION:
|
||||
{
|
||||
const int index = PinOrientationIndex( aPin.GetOrientation() );
|
||||
|
||||
if( index >= 0)
|
||||
val << PinOrientationNames()[ index ];
|
||||
break;
|
||||
return PinOrientationNames()[ index ];
|
||||
|
||||
return wxEmptyString;
|
||||
}
|
||||
|
||||
case COL_NUMBER_SIZE:
|
||||
val << m_unitsProvider.StringFromValue( aPin.GetNumberTextSize(), m_includeUnits );
|
||||
break;
|
||||
return m_unitsProvider.StringFromValue( aPin.GetNumberTextSize(), m_includeUnits );
|
||||
|
||||
case COL_NAME_SIZE:
|
||||
val << m_unitsProvider.StringFromValue( aPin.GetNameTextSize(), m_includeUnits );
|
||||
break;
|
||||
return m_unitsProvider.StringFromValue( aPin.GetNameTextSize(), m_includeUnits );
|
||||
|
||||
case COL_LENGTH:
|
||||
val << m_unitsProvider.StringFromValue( aPin.GetLength(), m_includeUnits );
|
||||
break;
|
||||
return m_unitsProvider.StringFromValue( aPin.GetLength(), m_includeUnits );
|
||||
|
||||
case COL_POSX:
|
||||
val << m_unitsProvider.StringFromValue( aPin.GetPosition().x, m_includeUnits );
|
||||
break;
|
||||
return m_unitsProvider.StringFromValue( aPin.GetPosition().x, m_includeUnits );
|
||||
|
||||
case COL_POSY:
|
||||
val << m_unitsProvider.StringFromValue( aPin.GetPosition().y, m_includeUnits );
|
||||
break;
|
||||
return m_unitsProvider.StringFromValue( aPin.GetPosition().y, m_includeUnits );
|
||||
|
||||
case COL_VISIBLE:
|
||||
val << stringFromBool( aPin.IsVisible() );
|
||||
break;
|
||||
return stringFromBool( aPin.IsVisible() );
|
||||
|
||||
case COL_UNIT:
|
||||
if( aPin.GetUnit() )
|
||||
val << LIB_SYMBOL::LetterSubReference( aPin.GetUnit(), 'A' );
|
||||
else
|
||||
val << wxGetTranslation( UNITS_ALL );
|
||||
break;
|
||||
case COL_DEMORGAN:
|
||||
switch( aPin.GetBodyStyle() )
|
||||
{
|
||||
case BODY_STYLE::BASE:
|
||||
val << wxGetTranslation( DEMORGAN_STD );
|
||||
break;
|
||||
case BODY_STYLE::DEMORGAN:
|
||||
val << wxGetTranslation( DEMORGAN_ALT );
|
||||
break;
|
||||
default:
|
||||
val << wxGetTranslation( DEMORGAN_ALL );
|
||||
break;
|
||||
}
|
||||
break;
|
||||
if( aPin.GetUnit() == 0 )
|
||||
return wxGetTranslation( UNITS_ALL );
|
||||
|
||||
return aPin.GetUnitDisplayName( aPin.GetUnit(), true );
|
||||
|
||||
case COL_BODY_STYLE:
|
||||
if( aPin.GetBodyStyle() == 0 )
|
||||
return wxGetTranslation( DEMORGAN_ALL );
|
||||
|
||||
return aPin.GetBodyStyleDescription( aPin.GetBodyStyle(), true );
|
||||
|
||||
default:
|
||||
wxFAIL_MSG( wxString::Format( "Invalid field id %d", aFieldId ) );
|
||||
break;
|
||||
return wxEmptyString;
|
||||
}
|
||||
return val;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -219,16 +207,19 @@ public:
|
||||
case COL_TYPE:
|
||||
if( PinTypeNames().Index( aValue, false ) != wxNOT_FOUND )
|
||||
aPin.SetType( (ELECTRICAL_PINTYPE) PinTypeNames().Index( aValue ) );
|
||||
|
||||
break;
|
||||
|
||||
case COL_SHAPE:
|
||||
if( PinShapeNames().Index( aValue, false ) != wxNOT_FOUND )
|
||||
aPin.SetShape( (GRAPHIC_PINSHAPE) PinShapeNames().Index( aValue ) );
|
||||
|
||||
break;
|
||||
|
||||
case COL_ORIENTATION:
|
||||
if( PinOrientationNames().Index( aValue, false ) != wxNOT_FOUND )
|
||||
aPin.SetOrientation( (PIN_ORIENTATION) PinOrientationNames().Index( aValue ) );
|
||||
|
||||
break;
|
||||
|
||||
case COL_NUMBER_SIZE:
|
||||
@ -244,8 +235,7 @@ public:
|
||||
break;
|
||||
|
||||
case COL_POSX:
|
||||
aPin.SetPosition( VECTOR2I( m_unitsProvider.ValueFromString( aValue ),
|
||||
aPin.GetPosition().y ) );
|
||||
aPin.SetPosition( VECTOR2I( m_unitsProvider.ValueFromString( aValue ), aPin.GetPosition().y ) );
|
||||
break;
|
||||
|
||||
case COL_POSY:
|
||||
@ -253,35 +243,45 @@ public:
|
||||
break;
|
||||
|
||||
case COL_VISIBLE:
|
||||
aPin.SetVisible(boolFromString( aValue, m_reporter ));
|
||||
aPin.SetVisible(boolFromString( aValue, m_reporter ) );
|
||||
break;
|
||||
|
||||
case COL_UNIT:
|
||||
if( MatchTranslationOrNative( aValue, UNITS_ALL, false ) )
|
||||
{
|
||||
aPin.SetUnit( 0 );
|
||||
break;
|
||||
}
|
||||
else
|
||||
|
||||
for( int i = 1; i <= aSymbol.GetUnitCount(); i++ )
|
||||
{
|
||||
for( int i = 1; i <= aSymbol.GetUnitCount(); i++ )
|
||||
if( aValue == aPin.GetBodyStyleDescription( i, true )
|
||||
|| aValue == aPin.GetBodyStyleDescription( i, false ) )
|
||||
{
|
||||
if( aValue == LIB_SYMBOL::LetterSubReference( i, 'A' ) )
|
||||
{
|
||||
aPin.SetUnit( i );
|
||||
break;
|
||||
}
|
||||
aPin.SetUnit( i );
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case COL_DEMORGAN:
|
||||
if( MatchTranslationOrNative( aValue, DEMORGAN_STD, false ) )
|
||||
aPin.SetBodyStyle( 1 );
|
||||
else if( MatchTranslationOrNative( aValue, DEMORGAN_ALT, false ) )
|
||||
aPin.SetBodyStyle( 2 );
|
||||
else
|
||||
case COL_BODY_STYLE:
|
||||
if( MatchTranslationOrNative( aValue, DEMORGAN_ALL, false ) )
|
||||
{
|
||||
aPin.SetBodyStyle( 0 );
|
||||
break;
|
||||
}
|
||||
|
||||
for( int i = 1; i <= aSymbol.GetBodyStyleCount(); i++ )
|
||||
{
|
||||
if( aValue == aPin.GetBodyStyleDescription( i, true )
|
||||
|| aValue == aPin.GetBodyStyleDescription( i, false ) )
|
||||
{
|
||||
aPin.SetBodyStyle( i );
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
default:
|
||||
@ -434,8 +434,7 @@ public:
|
||||
return GetValue( m_rows[ aRow ], aCol, m_frame );
|
||||
}
|
||||
|
||||
static wxString GetValue( const std::vector<SCH_PIN*>& pins, int aCol,
|
||||
EDA_DRAW_FRAME* aParentFrame )
|
||||
static wxString GetValue( const std::vector<SCH_PIN*>& pins, int aCol, EDA_DRAW_FRAME* aParentFrame )
|
||||
{
|
||||
wxString fieldValue;
|
||||
|
||||
@ -615,13 +614,14 @@ public:
|
||||
|
||||
// N.B. To meet the iterator sort conditions, we cannot simply invert the truth
|
||||
// to get the opposite sort. i.e. ~(a<b) != (a>b)
|
||||
auto cmp = [ ascending ]( const auto a, const auto b )
|
||||
{
|
||||
if( ascending )
|
||||
return a < b;
|
||||
else
|
||||
return b < a;
|
||||
};
|
||||
auto cmp =
|
||||
[ ascending ]( const auto a, const auto b )
|
||||
{
|
||||
if( ascending )
|
||||
return a < b;
|
||||
else
|
||||
return b < a;
|
||||
};
|
||||
|
||||
switch( sortCol )
|
||||
{
|
||||
@ -629,19 +629,21 @@ public:
|
||||
case COL_NAME:
|
||||
res = cmp( PIN_NUMBERS::Compare( lhStr, rhStr ), 0 );
|
||||
break;
|
||||
|
||||
case COL_NUMBER_SIZE:
|
||||
case COL_NAME_SIZE:
|
||||
res = cmp( parentFrame->ValueFromString( lhStr ),
|
||||
parentFrame->ValueFromString( rhStr ) );
|
||||
res = cmp( parentFrame->ValueFromString( lhStr ), parentFrame->ValueFromString( rhStr ) );
|
||||
break;
|
||||
|
||||
case COL_LENGTH:
|
||||
case COL_POSX:
|
||||
case COL_POSY:
|
||||
res = cmp( parentFrame->ValueFromString( lhStr ),
|
||||
parentFrame->ValueFromString( rhStr ) );
|
||||
res = cmp( parentFrame->ValueFromString( lhStr ), parentFrame->ValueFromString( rhStr ) );
|
||||
break;
|
||||
|
||||
case COL_VISIBLE:
|
||||
case COL_DEMORGAN:
|
||||
case COL_UNIT:
|
||||
case COL_BODY_STYLE:
|
||||
default:
|
||||
res = cmp( StrNumCmp( lhStr, rhStr ), 0 );
|
||||
break;
|
||||
@ -728,10 +730,8 @@ public:
|
||||
|
||||
for( SCH_PIN* pin : aPins )
|
||||
{
|
||||
const bool includedByUnit =
|
||||
( m_unitFilter == -1 ) || ( pin->GetUnit() == 0 ) || ( pin->GetUnit() == m_unitFilter );
|
||||
const bool includedByBodyStyle =
|
||||
( m_bodyStyleFilter == -1 ) || ( pin->GetBodyStyle() == m_bodyStyleFilter );
|
||||
const bool includedByUnit = m_unitFilter == -1 || pin->GetUnit() == 0 || pin->GetUnit() == m_unitFilter;
|
||||
const bool includedByBodyStyle = m_bodyStyleFilter == -1 || pin->GetBodyStyle() == m_bodyStyleFilter;
|
||||
const bool includedBySelection = !m_filterBySelection || pinIsInEditorSelection( pin );
|
||||
|
||||
if( includedByUnit && includedByBodyStyle && includedBySelection )
|
||||
@ -885,7 +885,7 @@ public:
|
||||
COL_POSY,
|
||||
COL_VISIBLE,
|
||||
COL_UNIT,
|
||||
COL_DEMORGAN,
|
||||
COL_BODY_STYLE,
|
||||
};
|
||||
|
||||
std::vector<std::vector<wxString>> exportTable;
|
||||
@ -1038,8 +1038,7 @@ private:
|
||||
};
|
||||
|
||||
|
||||
DIALOG_LIB_EDIT_PIN_TABLE::DIALOG_LIB_EDIT_PIN_TABLE( SYMBOL_EDIT_FRAME* parent,
|
||||
LIB_SYMBOL* aSymbol,
|
||||
DIALOG_LIB_EDIT_PIN_TABLE::DIALOG_LIB_EDIT_PIN_TABLE( SYMBOL_EDIT_FRAME* parent, LIB_SYMBOL* aSymbol,
|
||||
const std::vector<SCH_PIN*>& aSelectedPins ) :
|
||||
DIALOG_LIB_EDIT_PIN_TABLE_BASE( parent ),
|
||||
m_editFrame( parent ),
|
||||
@ -1089,8 +1088,7 @@ DIALOG_LIB_EDIT_PIN_TABLE::DIALOG_LIB_EDIT_PIN_TABLE( SYMBOL_EDIT_FRAME* parent,
|
||||
attr = new wxGridCellAttr;
|
||||
wxArrayString orientationNames = PinOrientationNames();
|
||||
orientationNames.push_back( INDETERMINATE_STATE );
|
||||
attr->SetRenderer( new GRID_CELL_ICON_TEXT_RENDERER( PinOrientationIcons(),
|
||||
orientationNames ) );
|
||||
attr->SetRenderer( new GRID_CELL_ICON_TEXT_RENDERER( PinOrientationIcons(), orientationNames ) );
|
||||
attr->SetEditor( new GRID_CELL_ICON_TEXT_POPUP( PinOrientationIcons(), orientationNames ) );
|
||||
m_grid->SetColAttr( COL_ORIENTATION, attr );
|
||||
|
||||
@ -1105,12 +1103,15 @@ DIALOG_LIB_EDIT_PIN_TABLE::DIALOG_LIB_EDIT_PIN_TABLE( SYMBOL_EDIT_FRAME* parent,
|
||||
m_grid->SetColAttr( COL_UNIT, attr );
|
||||
|
||||
attr = new wxGridCellAttr;
|
||||
wxArrayString demorganNames;
|
||||
demorganNames.push_back( wxGetTranslation( DEMORGAN_ALL ) );
|
||||
demorganNames.push_back( wxGetTranslation( DEMORGAN_STD ) );
|
||||
demorganNames.push_back( wxGetTranslation( DEMORGAN_ALT ) );
|
||||
attr->SetEditor( new GRID_CELL_COMBOBOX( demorganNames ) );
|
||||
m_grid->SetColAttr( COL_DEMORGAN, attr );
|
||||
wxArrayString bodyStyleNames;
|
||||
|
||||
bodyStyleNames.push_back( wxGetTranslation( DEMORGAN_ALL ) );
|
||||
|
||||
for( int i = 0; i < aSymbol->GetBodyStyleCount(); i++ )
|
||||
bodyStyleNames.push_back( aSymbol->GetBodyStyleNames()[i] );
|
||||
|
||||
attr->SetEditor( new GRID_CELL_COMBOBOX( bodyStyleNames ) );
|
||||
m_grid->SetColAttr( COL_BODY_STYLE, attr );
|
||||
|
||||
attr = new wxGridCellAttr;
|
||||
attr->SetRenderer( new wxGridCellBoolRenderer() );
|
||||
@ -1139,7 +1140,7 @@ DIALOG_LIB_EDIT_PIN_TABLE::DIALOG_LIB_EDIT_PIN_TABLE( SYMBOL_EDIT_FRAME* parent,
|
||||
GetSizer()->SetSizeHints(this);
|
||||
Centre();
|
||||
|
||||
if( aSymbol->IsMulti() )
|
||||
if( aSymbol->IsMultiUnit() )
|
||||
{
|
||||
m_unitFilter->Append( wxGetTranslation( UNITS_ALL ) );
|
||||
|
||||
@ -1154,7 +1155,7 @@ DIALOG_LIB_EDIT_PIN_TABLE::DIALOG_LIB_EDIT_PIN_TABLE( SYMBOL_EDIT_FRAME* parent,
|
||||
m_unitFilter->Enable( false );
|
||||
}
|
||||
|
||||
if( aSymbol->HasAlternateBodyStyle() )
|
||||
if( aSymbol->HasDeMorganBodyStyles() )
|
||||
{
|
||||
m_bodyStyleFilter->Append( wxGetTranslation( DEMORGAN_ALL ) );
|
||||
m_bodyStyleFilter->Append( wxGetTranslation( DEMORGAN_STD ) );
|
||||
@ -1162,6 +1163,15 @@ DIALOG_LIB_EDIT_PIN_TABLE::DIALOG_LIB_EDIT_PIN_TABLE( SYMBOL_EDIT_FRAME* parent,
|
||||
|
||||
m_bodyStyleFilter->SetSelection( -1 );
|
||||
}
|
||||
else if( aSymbol->IsMultiBodyStyle() )
|
||||
{
|
||||
m_bodyStyleFilter->Append( wxGetTranslation( DEMORGAN_ALL ) );
|
||||
|
||||
for( const wxString& bodyStyle : aSymbol->GetBodyStyleNames() )
|
||||
m_bodyStyleFilter->Append( bodyStyle );
|
||||
|
||||
m_bodyStyleFilter->SetSelection( -1 );
|
||||
}
|
||||
else
|
||||
{
|
||||
m_cbFilterByBodyStyle->Enable( false );
|
||||
@ -1223,15 +1233,15 @@ bool DIALOG_LIB_EDIT_PIN_TABLE::TransferDataToWindow()
|
||||
|
||||
m_dataModel->RebuildRows( m_pins, m_cbGroup->GetValue(), false );
|
||||
|
||||
if( m_symbol->IsMulti() )
|
||||
if( m_symbol->IsMultiUnit() )
|
||||
m_grid->ShowCol( COL_UNIT );
|
||||
else
|
||||
m_grid->HideCol( COL_UNIT );
|
||||
|
||||
if( m_editFrame->GetShowDeMorgan() )
|
||||
m_grid->ShowCol( COL_DEMORGAN );
|
||||
if( m_symbol->IsMultiBodyStyle() )
|
||||
m_grid->ShowCol( COL_BODY_STYLE );
|
||||
else
|
||||
m_grid->HideCol( COL_DEMORGAN );
|
||||
m_grid->HideCol( COL_BODY_STYLE );
|
||||
|
||||
updateSummary();
|
||||
|
||||
|
@ -40,7 +40,7 @@ enum COL_ORDER
|
||||
COL_POSY,
|
||||
COL_VISIBLE,
|
||||
COL_UNIT,
|
||||
COL_DEMORGAN,
|
||||
COL_BODY_STYLE,
|
||||
|
||||
COL_COUNT // keep as last
|
||||
};
|
||||
|
@ -87,7 +87,8 @@ DIALOG_LIB_EDIT_PIN_TABLE_BASE::DIALOG_LIB_EDIT_PIN_TABLE_BASE( wxWindow* parent
|
||||
m_grid->SetColSize( 9, 84 );
|
||||
m_grid->SetColSize( 10, 84 );
|
||||
m_grid->SetColSize( 11, 84 );
|
||||
m_grid->SetColSize( 12, 66 );
|
||||
m_grid->SetColSize( 12, 100 );
|
||||
m_grid->SetColSize( 13, 100 );
|
||||
m_grid->EnableDragColMove( false );
|
||||
m_grid->EnableDragColSize( true );
|
||||
m_grid->SetColLabelValue( 0, _("Count") );
|
||||
@ -103,7 +104,7 @@ DIALOG_LIB_EDIT_PIN_TABLE_BASE::DIALOG_LIB_EDIT_PIN_TABLE_BASE( wxWindow* parent
|
||||
m_grid->SetColLabelValue( 10, _("Y Position") );
|
||||
m_grid->SetColLabelValue( 11, _("Visible") );
|
||||
m_grid->SetColLabelValue( 12, _("Unit") );
|
||||
m_grid->SetColLabelValue( 13, _("De Morgan") );
|
||||
m_grid->SetColLabelValue( 13, _("Body Style") );
|
||||
m_grid->SetColLabelSize( 24 );
|
||||
m_grid->SetColLabelAlignment( wxALIGN_CENTER, wxALIGN_CENTER );
|
||||
|
||||
|
@ -524,10 +524,10 @@
|
||||
<property name="close_button">1</property>
|
||||
<property name="col_label_horiz_alignment">wxALIGN_CENTER</property>
|
||||
<property name="col_label_size">24</property>
|
||||
<property name="col_label_values">"Count" "Number" "Name" "Electrical Type" "Graphic Style" "Orientation" "Number Text Size" "Name Text Size" "Length" "X Position" "Y Position" "Visible" "Unit" "De Morgan"</property>
|
||||
<property name="col_label_values">"Count" "Number" "Name" "Electrical Type" "Graphic Style" "Orientation" "Number Text Size" "Name Text Size" "Length" "X Position" "Y Position" "Visible" "Unit" "Body Style"</property>
|
||||
<property name="col_label_vert_alignment">wxALIGN_CENTER</property>
|
||||
<property name="cols">14</property>
|
||||
<property name="column_sizes">60,66,84,140,140,100,110,110,84,84,84,84,66</property>
|
||||
<property name="column_sizes">60,66,84,140,140,100,110,110,84,84,84,84,100,100</property>
|
||||
<property name="context_help"></property>
|
||||
<property name="context_menu">1</property>
|
||||
<property name="default_pane">0</property>
|
||||
|
@ -131,14 +131,30 @@ DIALOG_LIB_SYMBOL_PROPERTIES::DIALOG_LIB_SYMBOL_PROPERTIES( SYMBOL_EDIT_FRAME* a
|
||||
|
||||
m_SymbolNameCtrl->SetValidator( FIELD_VALIDATOR( FIELD_T::VALUE ) );
|
||||
|
||||
m_unitNamesGrid->PushEventHandler( new GRID_TRICKS( m_unitNamesGrid ) );
|
||||
m_unitNamesGrid->SetSelectionMode( wxGrid::wxGridSelectRows );
|
||||
|
||||
m_bodyStyleNamesGrid->PushEventHandler( new GRID_TRICKS( m_bodyStyleNamesGrid,
|
||||
[this]( wxCommandEvent& aEvent )
|
||||
{
|
||||
OnAddBodyStyle( aEvent );
|
||||
} ) );
|
||||
m_bodyStyleNamesGrid->SetSelectionMode( wxGrid::wxGridSelectRows );
|
||||
|
||||
// Configure button logos
|
||||
m_bpAdd->SetBitmap( KiBitmapBundle( BITMAPS::small_plus ) );
|
||||
m_bpDelete->SetBitmap( KiBitmapBundle( BITMAPS::small_trash ) );
|
||||
m_bpMoveUp->SetBitmap( KiBitmapBundle( BITMAPS::small_up ) );
|
||||
m_bpMoveDown->SetBitmap( KiBitmapBundle( BITMAPS::small_down ) );
|
||||
m_bpDelete->SetBitmap( KiBitmapBundle( BITMAPS::small_trash ) );
|
||||
|
||||
m_bpAddBodyStyle->SetBitmap( KiBitmapBundle( BITMAPS::small_plus ) );
|
||||
m_bpMoveUpBodyStyle->SetBitmap( KiBitmapBundle( BITMAPS::small_up ) );
|
||||
m_bpMoveDownBodyStyle->SetBitmap( KiBitmapBundle( BITMAPS::small_down ) );
|
||||
m_bpDeleteBodyStyle->SetBitmap( KiBitmapBundle( BITMAPS::small_trash ) );
|
||||
|
||||
m_addFilterButton->SetBitmap( KiBitmapBundle( BITMAPS::small_plus ) );
|
||||
m_deleteFilterButton->SetBitmap( KiBitmapBundle( BITMAPS::small_trash ) );
|
||||
m_editFilterButton->SetBitmap( KiBitmapBundle( BITMAPS::small_edit ) );
|
||||
m_deleteFilterButton->SetBitmap( KiBitmapBundle( BITMAPS::small_trash ) );
|
||||
|
||||
m_btnCreateJumperPinGroup->SetBitmap( KiBitmapBundle( BITMAPS::right ) );
|
||||
m_btnRemoveJumperPinGroup->SetBitmap( KiBitmapBundle( BITMAPS::left ) );
|
||||
@ -153,10 +169,8 @@ DIALOG_LIB_SYMBOL_PROPERTIES::DIALOG_LIB_SYMBOL_PROPERTIES( SYMBOL_EDIT_FRAME* a
|
||||
}
|
||||
|
||||
// wxFormBuilder doesn't include this event...
|
||||
m_grid->Connect( wxEVT_GRID_CELL_CHANGING,
|
||||
wxGridEventHandler( DIALOG_LIB_SYMBOL_PROPERTIES::OnGridCellChanging ), nullptr, this );
|
||||
m_grid->Connect( wxEVT_GRID_CELL_CHANGED,
|
||||
wxGridEventHandler( DIALOG_LIB_SYMBOL_PROPERTIES::OnGridCellChanged ), nullptr, this );
|
||||
m_grid->Bind( wxEVT_GRID_CELL_CHANGING, &DIALOG_LIB_SYMBOL_PROPERTIES::OnGridCellChanging, this );
|
||||
m_grid->Bind( wxEVT_GRID_CELL_CHANGED, &DIALOG_LIB_SYMBOL_PROPERTIES::OnGridCellChanged, this );
|
||||
m_grid->GetGridWindow()->Bind( wxEVT_MOTION, &DIALOG_LIB_SYMBOL_PROPERTIES::OnGridMotion, this );
|
||||
|
||||
|
||||
@ -205,14 +219,14 @@ DIALOG_LIB_SYMBOL_PROPERTIES::~DIALOG_LIB_SYMBOL_PROPERTIES()
|
||||
// Prevents crash bug in wxGrid's d'tor
|
||||
m_grid->DestroyTable( m_fields );
|
||||
|
||||
m_grid->Disconnect( wxEVT_GRID_CELL_CHANGING,
|
||||
wxGridEventHandler( DIALOG_LIB_SYMBOL_PROPERTIES::OnGridCellChanging ), nullptr, this );
|
||||
m_grid->Disconnect( wxEVT_GRID_CELL_CHANGED,
|
||||
wxGridEventHandler( DIALOG_LIB_SYMBOL_PROPERTIES::OnGridCellChanged ), nullptr, this );
|
||||
m_grid->Unbind( wxEVT_GRID_CELL_CHANGING, &DIALOG_LIB_SYMBOL_PROPERTIES::OnGridCellChanging, this );
|
||||
m_grid->Unbind( wxEVT_GRID_CELL_CHANGED, &DIALOG_LIB_SYMBOL_PROPERTIES::OnGridCellChanged, this );
|
||||
m_grid->GetGridWindow()->Unbind( wxEVT_MOTION, &DIALOG_LIB_SYMBOL_PROPERTIES::OnGridMotion, this );
|
||||
|
||||
// Delete the GRID_TRICKS.
|
||||
m_grid->PopEventHandler( true );
|
||||
m_unitNamesGrid->PopEventHandler( true );
|
||||
m_bodyStyleNamesGrid->PopEventHandler( true );
|
||||
}
|
||||
|
||||
|
||||
@ -264,15 +278,36 @@ bool DIALOG_LIB_SYMBOL_PROPERTIES::TransferDataToWindow()
|
||||
m_SymbolNameCtrl->ChangeValue( UnescapeString( m_libEntry->GetName() ) );
|
||||
|
||||
m_KeywordCtrl->ChangeValue( m_libEntry->GetKeyWords() );
|
||||
m_SelNumberOfUnits->SetValue( m_libEntry->GetUnitCount() );
|
||||
m_unitSpinCtrl->SetValue( m_libEntry->GetUnitCount() );
|
||||
m_OptionPartsInterchangeable->SetValue( !m_libEntry->UnitsLocked() || m_libEntry->GetUnitCount() == 1 );
|
||||
|
||||
// If a symbol contains no body-style-specific pins or graphic items,
|
||||
// symbol->HasAlternateBodyStyle() will return false.
|
||||
// But when editing a symbol with DeMorgan option set, we don't want to keep turning it off
|
||||
// just because there aren't any body-style-specific items yet, so we force it to on if the
|
||||
// parent frame has it enabled.
|
||||
m_hasAlternateBodyStyles->SetValue( m_Parent->GetShowDeMorgan() );
|
||||
updateUnitCount();
|
||||
|
||||
for( int unit = 0; unit < m_libEntry->GetUnitCount(); unit++ )
|
||||
{
|
||||
if( m_libEntry->GetUnitDisplayNames().contains( unit + 1 ) )
|
||||
m_unitNamesGrid->SetCellValue( unit, 1, m_libEntry->GetUnitDisplayNames().at( unit + 1 ) );
|
||||
}
|
||||
|
||||
if( m_libEntry->HasDeMorganBodyStyles() )
|
||||
{
|
||||
m_radioDeMorgan->SetValue( true );
|
||||
}
|
||||
else if( m_libEntry->IsMultiBodyStyle() )
|
||||
{
|
||||
m_radioCustom->SetValue( true );
|
||||
|
||||
for( const wxString& name : m_libEntry->GetBodyStyleNames() )
|
||||
{
|
||||
int row = m_bodyStyleNamesGrid->GetNumberRows();
|
||||
m_bodyStyleNamesGrid->AppendRows( 1 );
|
||||
m_bodyStyleNamesGrid->SetCellValue( row, 0, name );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
m_radioSingle->SetValue( true );
|
||||
}
|
||||
|
||||
m_OptionPower->SetValue( m_libEntry->IsPower() );
|
||||
m_OptionLocalPower->SetValue( m_libEntry->IsLocalPower() );
|
||||
@ -440,15 +475,40 @@ bool DIALOG_LIB_SYMBOL_PROPERTIES::Validate()
|
||||
* Confirm destructive actions.
|
||||
*/
|
||||
|
||||
if( m_SelNumberOfUnits->GetValue() < m_libEntry->GetUnitCount() )
|
||||
if( m_unitSpinCtrl->GetValue() < m_libEntry->GetUnitCount() )
|
||||
{
|
||||
if( !IsOK( this, _( "Delete extra units from symbol?" ) ) )
|
||||
return false;
|
||||
}
|
||||
|
||||
if( !m_hasAlternateBodyStyles->GetValue() && m_libEntry->HasAlternateBodyStyle() )
|
||||
int bodyStyleCount = 0;
|
||||
|
||||
if( m_radioSingle->GetValue() )
|
||||
{
|
||||
if( !IsOK( this, _( "Delete alternate body style (De Morgan) from symbol?" ) ) )
|
||||
bodyStyleCount = 1;
|
||||
}
|
||||
if( m_radioDeMorgan->GetValue() )
|
||||
{
|
||||
bodyStyleCount = 2;
|
||||
}
|
||||
else if( m_radioCustom->GetValue() )
|
||||
{
|
||||
for( int ii = 0; ii < m_bodyStyleNamesGrid->GetNumberRows(); ++ii )
|
||||
{
|
||||
if( !m_bodyStyleNamesGrid->GetCellValue( ii, 0 ).IsEmpty() )
|
||||
bodyStyleCount++;
|
||||
}
|
||||
}
|
||||
|
||||
if( bodyStyleCount == 0 )
|
||||
{
|
||||
m_delayedErrorMessage = _( "Symbol must have at least 1 body style" );
|
||||
return false;
|
||||
}
|
||||
|
||||
if( bodyStyleCount < m_libEntry->GetBodyStyleCount() )
|
||||
{
|
||||
if( !IsOK( this, _( "Delete extra body styles from symbol?" ) ) )
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -464,6 +524,12 @@ bool DIALOG_LIB_SYMBOL_PROPERTIES::TransferDataFromWindow()
|
||||
if( !m_grid->CommitPendingChanges() )
|
||||
return false;
|
||||
|
||||
if( !m_unitNamesGrid->CommitPendingChanges() )
|
||||
return false;
|
||||
|
||||
if( !m_bodyStyleNamesGrid->CommitPendingChanges() )
|
||||
return false;
|
||||
|
||||
wxString newName = EscapeString( m_SymbolNameCtrl->GetValue(), CTX_LIBID );
|
||||
wxString oldName = m_libEntry->GetName();
|
||||
|
||||
@ -550,10 +616,43 @@ bool DIALOG_LIB_SYMBOL_PROPERTIES::TransferDataFromWindow()
|
||||
|
||||
m_libEntry->SetName( newName );
|
||||
m_libEntry->SetKeyWords( m_KeywordCtrl->GetValue() );
|
||||
m_libEntry->SetUnitCount( m_SelNumberOfUnits->GetValue() );
|
||||
m_libEntry->SetUnitCount( m_unitSpinCtrl->GetValue(), true );
|
||||
m_libEntry->LockUnits( m_libEntry->GetUnitCount() > 1 && !m_OptionPartsInterchangeable->GetValue() );
|
||||
m_libEntry->SetHasAlternateBodyStyle( m_hasAlternateBodyStyles->GetValue() );
|
||||
m_Parent->SetShowDeMorgan( m_hasAlternateBodyStyles->GetValue() );
|
||||
|
||||
m_libEntry->GetUnitDisplayNames().clear();
|
||||
|
||||
for( int row = 0; row < m_unitNamesGrid->GetNumberRows(); row++ )
|
||||
{
|
||||
if( !m_unitNamesGrid->GetCellValue( row, 1 ).IsEmpty() )
|
||||
m_libEntry->GetUnitDisplayNames()[row+1] = m_unitNamesGrid->GetCellValue( row, 1 );
|
||||
}
|
||||
|
||||
if( m_radioSingle->GetValue() )
|
||||
{
|
||||
m_libEntry->SetHasDeMorganBodyStyles( false );
|
||||
m_libEntry->SetBodyStyleCount( 1, false, false );
|
||||
m_libEntry->SetBodyStyleNames( {} );
|
||||
}
|
||||
else if( m_radioDeMorgan->GetValue() )
|
||||
{
|
||||
m_libEntry->SetHasDeMorganBodyStyles( true );
|
||||
m_libEntry->SetBodyStyleCount( 2, false, true );
|
||||
m_libEntry->SetBodyStyleNames( {} );
|
||||
}
|
||||
else
|
||||
{
|
||||
std::vector<wxString> bodyStyleNames;
|
||||
|
||||
for( int row = 0; row < m_bodyStyleNamesGrid->GetNumberRows(); ++row )
|
||||
{
|
||||
if( !m_bodyStyleNamesGrid->GetCellValue( row, 0 ).IsEmpty() )
|
||||
bodyStyleNames.push_back( m_bodyStyleNamesGrid->GetCellValue( row, 0 ) );
|
||||
}
|
||||
|
||||
m_libEntry->SetHasDeMorganBodyStyles( false );
|
||||
m_libEntry->SetBodyStyleCount( bodyStyleNames.size(), true, true );
|
||||
m_libEntry->SetBodyStyleNames( bodyStyleNames );
|
||||
}
|
||||
|
||||
if( m_OptionPower->GetValue() )
|
||||
{
|
||||
@ -610,16 +709,21 @@ bool DIALOG_LIB_SYMBOL_PROPERTIES::TransferDataFromWindow()
|
||||
|
||||
m_Parent->UpdateAfterSymbolProperties( &oldName );
|
||||
|
||||
// It's possible that the symbol being edited has no pins, in which case there may be no
|
||||
// alternate body style objects causing #LIB_SYMBOL::HasAlternateBodyStyle() to always return
|
||||
// false. This allows the user to edit the alternate body style just in case this condition
|
||||
// occurs.
|
||||
m_Parent->SetShowDeMorgan( m_hasAlternateBodyStyles->GetValue() );
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
void DIALOG_LIB_SYMBOL_PROPERTIES::OnBodyStyle( wxCommandEvent& event )
|
||||
{
|
||||
m_bodyStyleNamesGrid->Enable( m_radioCustom->GetValue() );
|
||||
|
||||
m_bpAddBodyStyle->Enable( m_radioCustom->GetValue() );
|
||||
m_bpMoveUpBodyStyle->Enable( m_radioCustom->GetValue() );
|
||||
m_bpMoveDownBodyStyle->Enable( m_radioCustom->GetValue() );
|
||||
m_bpDeleteBodyStyle->Enable( m_radioCustom->GetValue() );
|
||||
}
|
||||
|
||||
|
||||
void DIALOG_LIB_SYMBOL_PROPERTIES::OnGridMotion( wxMouseEvent& aEvent )
|
||||
{
|
||||
aEvent.Skip();
|
||||
@ -635,9 +739,8 @@ void DIALOG_LIB_SYMBOL_PROPERTIES::OnGridMotion( wxMouseEvent& aEvent )
|
||||
return;
|
||||
}
|
||||
|
||||
m_grid->SetToolTip(
|
||||
wxString::Format( _( "This field is inherited from '%s'." ),
|
||||
m_fields->ParentField( row ).GetName() ) );
|
||||
m_grid->SetToolTip( wxString::Format( _( "This field is inherited from '%s'." ),
|
||||
m_fields->ParentField( row ).GetName() ) );
|
||||
}
|
||||
|
||||
|
||||
@ -799,6 +902,53 @@ void DIALOG_LIB_SYMBOL_PROPERTIES::OnMoveDown( wxCommandEvent& event )
|
||||
}
|
||||
|
||||
|
||||
void DIALOG_LIB_SYMBOL_PROPERTIES::OnAddBodyStyle( wxCommandEvent& event )
|
||||
{
|
||||
m_bodyStyleNamesGrid->OnAddRow(
|
||||
[&]() -> std::pair<int, int>
|
||||
{
|
||||
m_bodyStyleNamesGrid->AppendRows( 1 );
|
||||
OnModify();
|
||||
|
||||
return { m_bodyStyleNamesGrid->GetNumberRows() - 1, 0 };
|
||||
} );
|
||||
}
|
||||
|
||||
|
||||
void DIALOG_LIB_SYMBOL_PROPERTIES::OnDeleteBodyStyle( wxCommandEvent& event )
|
||||
{
|
||||
m_bodyStyleNamesGrid->OnDeleteRows(
|
||||
[&]( int row )
|
||||
{
|
||||
m_bodyStyleNamesGrid->DeleteRows( row );
|
||||
} );
|
||||
|
||||
OnModify();
|
||||
}
|
||||
|
||||
|
||||
void DIALOG_LIB_SYMBOL_PROPERTIES::OnBodyStyleMoveUp( wxCommandEvent& event )
|
||||
{
|
||||
m_bodyStyleNamesGrid->OnMoveRowUp(
|
||||
[&]( int row )
|
||||
{
|
||||
m_bodyStyleNamesGrid->SwapRows( row, row - 1 );
|
||||
OnModify();
|
||||
} );
|
||||
}
|
||||
|
||||
|
||||
void DIALOG_LIB_SYMBOL_PROPERTIES::OnBodyStyleMoveDown( wxCommandEvent& event )
|
||||
{
|
||||
m_bodyStyleNamesGrid->OnMoveRowDown(
|
||||
[&]( int row )
|
||||
{
|
||||
m_bodyStyleNamesGrid->SwapRows( row, row + 1 );
|
||||
OnModify();
|
||||
} );
|
||||
}
|
||||
|
||||
|
||||
void DIALOG_LIB_SYMBOL_PROPERTIES::OnEditSpiceModel( wxCommandEvent& event )
|
||||
{
|
||||
if( !m_grid->CommitPendingChanges() )
|
||||
@ -949,7 +1099,7 @@ void DIALOG_LIB_SYMBOL_PROPERTIES::adjustGridColumns()
|
||||
|
||||
void DIALOG_LIB_SYMBOL_PROPERTIES::OnUpdateUI( wxUpdateUIEvent& event )
|
||||
{
|
||||
m_OptionPartsInterchangeable->Enable( m_SelNumberOfUnits->GetValue() > 1 );
|
||||
m_OptionPartsInterchangeable->Enable( m_unitSpinCtrl->GetValue() > 1 );
|
||||
m_pinNameOffset.Enable( m_PinsNameInsideButt->GetValue() );
|
||||
|
||||
if( m_grid->IsCellEditControlShown() )
|
||||
@ -1092,15 +1242,57 @@ void DIALOG_LIB_SYMBOL_PROPERTIES::OnCheckBox( wxCommandEvent& event )
|
||||
}
|
||||
|
||||
|
||||
void DIALOG_LIB_SYMBOL_PROPERTIES::OnSpinCtrl( wxSpinEvent& event )
|
||||
bool DIALOG_LIB_SYMBOL_PROPERTIES::updateUnitCount()
|
||||
{
|
||||
OnModify();
|
||||
m_unitNamesGrid->CommitPendingChanges( true /* aQuietMode */ );
|
||||
|
||||
int extra = m_unitNamesGrid->GetNumberRows() - m_unitSpinCtrl->GetValue();
|
||||
int needed = m_unitSpinCtrl->GetValue() - m_unitNamesGrid->GetNumberRows();
|
||||
|
||||
if( extra > 0 )
|
||||
{
|
||||
m_unitNamesGrid->DeleteRows( m_unitNamesGrid->GetNumberRows() - extra, extra );
|
||||
return true;
|
||||
}
|
||||
|
||||
if( needed > 0 )
|
||||
{
|
||||
m_unitNamesGrid->AppendRows( needed );
|
||||
|
||||
for( int row = m_unitNamesGrid->GetNumberRows() - needed; row < m_unitNamesGrid->GetNumberRows(); ++row )
|
||||
m_unitNamesGrid->SetCellValue( row, 0, LIB_SYMBOL::LetterSubReference( row + 1, 'A' ) );
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
void DIALOG_LIB_SYMBOL_PROPERTIES::OnSpinCtrlText( wxCommandEvent& event )
|
||||
void DIALOG_LIB_SYMBOL_PROPERTIES::OnUnitSpinCtrl( wxSpinEvent& event )
|
||||
{
|
||||
OnModify();
|
||||
if( updateUnitCount() )
|
||||
OnModify();
|
||||
}
|
||||
|
||||
|
||||
void DIALOG_LIB_SYMBOL_PROPERTIES::OnUnitSpinCtrlText( wxCommandEvent& event )
|
||||
{
|
||||
// wait for kill focus to update unit count
|
||||
}
|
||||
|
||||
|
||||
void DIALOG_LIB_SYMBOL_PROPERTIES::OnUnitSpinCtrlEnter( wxCommandEvent& event )
|
||||
{
|
||||
if( updateUnitCount() )
|
||||
OnModify();
|
||||
}
|
||||
|
||||
|
||||
void DIALOG_LIB_SYMBOL_PROPERTIES::OnUnitSpinCtrlKillFocus( wxFocusEvent& event )
|
||||
{
|
||||
if( updateUnitCount() )
|
||||
OnModify();
|
||||
}
|
||||
|
||||
|
||||
|
@ -54,14 +54,21 @@ protected:
|
||||
void OnText( wxCommandEvent& event ) override;
|
||||
void OnCombobox( wxCommandEvent& event ) override;
|
||||
void OnCheckBox( wxCommandEvent& event ) override;
|
||||
void OnSpinCtrl( wxSpinEvent& event ) override;
|
||||
void OnSpinCtrlText( wxCommandEvent& event ) override;
|
||||
void OnUnitSpinCtrl( wxSpinEvent& event ) override;
|
||||
void OnUnitSpinCtrlText( wxCommandEvent& event ) override;
|
||||
void OnUnitSpinCtrlKillFocus( wxFocusEvent& event ) override;
|
||||
void OnUnitSpinCtrlEnter( wxCommandEvent& event ) override;
|
||||
void OnBodyStyle( wxCommandEvent& event ) override;
|
||||
|
||||
private:
|
||||
void OnAddField( wxCommandEvent& event ) override;
|
||||
void OnDeleteField( wxCommandEvent& event ) override;
|
||||
void OnMoveUp( wxCommandEvent& event ) override;
|
||||
void OnMoveDown( wxCommandEvent& event ) override;
|
||||
void OnAddBodyStyle( wxCommandEvent& event ) override;
|
||||
void OnBodyStyleMoveUp( wxCommandEvent& event ) override;
|
||||
void OnBodyStyleMoveDown( wxCommandEvent& event ) override;
|
||||
void OnDeleteBodyStyle( wxCommandEvent& event ) override;
|
||||
void OnSymbolNameKillFocus( wxFocusEvent& event ) override;
|
||||
void OnSymbolNameText( wxCommandEvent& event ) override;
|
||||
void OnAddFootprintFilter( wxCommandEvent& event ) override;
|
||||
@ -80,6 +87,7 @@ private:
|
||||
void OnGroupedPinListClick( wxCommandEvent& event ) override;
|
||||
void OnAvailablePinsClick( wxCommandEvent& event ) override;
|
||||
|
||||
bool updateUnitCount();
|
||||
void adjustGridColumns();
|
||||
void syncControlStates( bool aIsAlias );
|
||||
|
||||
|
@ -164,31 +164,6 @@ DIALOG_LIB_SYMBOL_PROPERTIES_BASE::DIALOG_LIB_SYMBOL_PROPERTIES_BASE( wxWindow*
|
||||
wxStaticBoxSizer* sbSizerSymbol;
|
||||
sbSizerSymbol = new wxStaticBoxSizer( new wxStaticBox( m_PanelBasic, wxID_ANY, _("General") ), wxVERTICAL );
|
||||
|
||||
wxBoxSizer* bSizerUnitCount;
|
||||
bSizerUnitCount = new wxBoxSizer( wxHORIZONTAL );
|
||||
|
||||
m_staticTextNbUnits = new wxStaticText( sbSizerSymbol->GetStaticBox(), wxID_ANY, _("Number of units:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_staticTextNbUnits->Wrap( -1 );
|
||||
m_staticTextNbUnits->SetToolTip( _("Enter the number of units for a symbol that contains more than one unit") );
|
||||
|
||||
bSizerUnitCount->Add( m_staticTextNbUnits, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
|
||||
|
||||
m_SelNumberOfUnits = new wxSpinCtrl( sbSizerSymbol->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 1, 64, 1 );
|
||||
bSizerUnitCount->Add( m_SelNumberOfUnits, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
|
||||
|
||||
|
||||
sbSizerSymbol->Add( bSizerUnitCount, 1, wxEXPAND|wxLEFT, 4 );
|
||||
|
||||
m_OptionPartsInterchangeable = new wxCheckBox( sbSizerSymbol->GetStaticBox(), wxID_ANY, _("All units are interchangeable"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_OptionPartsInterchangeable->SetToolTip( _("Check this option when all symbol units have the same function.\nFor instance, this should be checked for a quad NAND gate, while it should not be checked for a dual triode (where unit C is the filament).") );
|
||||
|
||||
sbSizerSymbol->Add( m_OptionPartsInterchangeable, 0, wxALL, 4 );
|
||||
|
||||
m_hasAlternateBodyStyles = new wxCheckBox( sbSizerSymbol->GetStaticBox(), wxID_ANY, _("Has alternate body style (De Morgan)"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_hasAlternateBodyStyles->SetToolTip( _("Check this option if the symbol has an alternate body style for a De Morgan logic equivalence.\nFor instance, this should be checked for a NAND gate to provide an alternate representation as an OR gate with inverted inputs.") );
|
||||
|
||||
sbSizerSymbol->Add( m_hasAlternateBodyStyles, 0, wxBOTTOM|wxRIGHT|wxLEFT, 4 );
|
||||
|
||||
m_OptionPower = new wxCheckBox( sbSizerSymbol->GetStaticBox(), wxID_ANY, _("Define as power symbol"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_OptionPower->SetToolTip( _("Power symbols define a global net with the value as a netname.\nThey will not be included in the BOM and cannot be assigned a footprint.") );
|
||||
|
||||
@ -209,7 +184,7 @@ DIALOG_LIB_SYMBOL_PROPERTIES_BASE::DIALOG_LIB_SYMBOL_PROPERTIES_BASE( wxWindow*
|
||||
sbSizerSymbol->Add( bSizer16, 1, wxEXPAND, 5 );
|
||||
|
||||
|
||||
bSizerLeftCol->Add( sbSizerSymbol, 0, wxEXPAND|wxALL, 5 );
|
||||
bSizerLeftCol->Add( sbSizerSymbol, 1, wxEXPAND|wxALL, 5 );
|
||||
|
||||
|
||||
bSizerLowerBasicPanel->Add( bSizerLeftCol, 1, wxEXPAND, 5 );
|
||||
@ -258,7 +233,7 @@ DIALOG_LIB_SYMBOL_PROPERTIES_BASE::DIALOG_LIB_SYMBOL_PROPERTIES_BASE( wxWindow*
|
||||
bSizerNameOffset->Add( m_nameOffsetUnits, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
|
||||
|
||||
|
||||
sbSizerPinTextOpts->Add( bSizerNameOffset, 0, wxBOTTOM|wxEXPAND|wxTOP, 4 );
|
||||
sbSizerPinTextOpts->Add( bSizerNameOffset, 0, wxEXPAND|wxTOP, 2 );
|
||||
|
||||
|
||||
sbSizerPinTextOpts->Add( 0, 0, 0, wxEXPAND, 5 );
|
||||
@ -300,32 +275,187 @@ DIALOG_LIB_SYMBOL_PROPERTIES_BASE::DIALOG_LIB_SYMBOL_PROPERTIES_BASE( wxWindow*
|
||||
m_PanelBasic->SetSizer( bSizerBasicPanel );
|
||||
m_PanelBasic->Layout();
|
||||
bSizerBasicPanel->Fit( m_PanelBasic );
|
||||
m_NoteBook->AddPage( m_PanelBasic, _("General"), false );
|
||||
m_PanelFootprintFilter = new wxPanel( m_NoteBook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
|
||||
wxBoxSizer* bPanelFpFilterBoxSizer;
|
||||
bPanelFpFilterBoxSizer = new wxBoxSizer( wxHORIZONTAL );
|
||||
m_NoteBook->AddPage( m_PanelBasic, _("General"), true );
|
||||
m_PanelUnitsAndBodyStyles = new wxPanel( m_NoteBook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
|
||||
wxBoxSizer* bSizerUnitsAndBodyStyles;
|
||||
bSizerUnitsAndBodyStyles = new wxBoxSizer( wxHORIZONTAL );
|
||||
|
||||
wxBoxSizer* bFpFilterLeftBoxSizer;
|
||||
bFpFilterLeftBoxSizer = new wxBoxSizer( wxVERTICAL );
|
||||
wxStaticBoxSizer* sbSizerUnits;
|
||||
sbSizerUnits = new wxStaticBoxSizer( new wxStaticBox( m_PanelUnitsAndBodyStyles, wxID_ANY, _("Symbol Units") ), wxVERTICAL );
|
||||
|
||||
m_staticTextFootprints = new wxStaticText( m_PanelFootprintFilter, wxID_ANY, _("Footprint filters:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
wxBoxSizer* bSizerUnitCount;
|
||||
bSizerUnitCount = new wxBoxSizer( wxHORIZONTAL );
|
||||
|
||||
m_staticTextNbUnits = new wxStaticText( sbSizerUnits->GetStaticBox(), wxID_ANY, _("Number of units:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_staticTextNbUnits->Wrap( -1 );
|
||||
m_staticTextNbUnits->SetToolTip( _("Enter the number of units for a symbol that contains more than one unit") );
|
||||
|
||||
bSizerUnitCount->Add( m_staticTextNbUnits, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
|
||||
|
||||
m_unitSpinCtrl = new wxSpinCtrl( sbSizerUnits->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 1, 64, 1 );
|
||||
bSizerUnitCount->Add( m_unitSpinCtrl, 0, wxALIGN_CENTER_VERTICAL, 5 );
|
||||
|
||||
|
||||
sbSizerUnits->Add( bSizerUnitCount, 0, wxEXPAND|wxBOTTOM|wxLEFT, 4 );
|
||||
|
||||
|
||||
sbSizerUnits->Add( 0, 2, 0, wxEXPAND, 5 );
|
||||
|
||||
m_OptionPartsInterchangeable = new wxCheckBox( sbSizerUnits->GetStaticBox(), wxID_ANY, _("All units are interchangeable"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_OptionPartsInterchangeable->SetToolTip( _("Check this option when all symbol units have the same function.\nFor instance, this should be checked for a quad NAND gate, while it should not be checked for a dual triode (where unit C is the filament).") );
|
||||
|
||||
sbSizerUnits->Add( m_OptionPartsInterchangeable, 0, wxBOTTOM|wxRIGHT|wxLEFT, 4 );
|
||||
|
||||
|
||||
sbSizerUnits->Add( 0, 15, 0, wxEXPAND, 5 );
|
||||
|
||||
m_unitNamesLabel = new wxStaticText( sbSizerUnits->GetStaticBox(), wxID_ANY, _("Unit display names (optional):"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_unitNamesLabel->Wrap( -1 );
|
||||
sbSizerUnits->Add( m_unitNamesLabel, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
|
||||
|
||||
m_unitNamesGrid = new WX_GRID( sbSizerUnits->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 );
|
||||
|
||||
// Grid
|
||||
m_unitNamesGrid->CreateGrid( 0, 2 );
|
||||
m_unitNamesGrid->EnableEditing( true );
|
||||
m_unitNamesGrid->EnableGridLines( true );
|
||||
m_unitNamesGrid->EnableDragGridSize( false );
|
||||
m_unitNamesGrid->SetMargins( 0, 0 );
|
||||
|
||||
// Columns
|
||||
m_unitNamesGrid->SetColSize( 0, 36 );
|
||||
m_unitNamesGrid->SetColSize( 1, 400 );
|
||||
m_unitNamesGrid->EnableDragColMove( false );
|
||||
m_unitNamesGrid->EnableDragColSize( false );
|
||||
m_unitNamesGrid->SetColLabelSize( 0 );
|
||||
m_unitNamesGrid->SetColLabelAlignment( wxALIGN_CENTER, wxALIGN_CENTER );
|
||||
|
||||
// Rows
|
||||
m_unitNamesGrid->EnableDragRowSize( false );
|
||||
m_unitNamesGrid->SetRowLabelSize( 0 );
|
||||
m_unitNamesGrid->SetRowLabelAlignment( wxALIGN_CENTER, wxALIGN_CENTER );
|
||||
|
||||
// Label Appearance
|
||||
|
||||
// Cell Defaults
|
||||
m_unitNamesGrid->SetDefaultCellAlignment( wxALIGN_LEFT, wxALIGN_TOP );
|
||||
sbSizerUnits->Add( m_unitNamesGrid, 1, wxALL|wxEXPAND, 5 );
|
||||
|
||||
|
||||
bSizerUnitsAndBodyStyles->Add( sbSizerUnits, 1, wxEXPAND|wxALL, 10 );
|
||||
|
||||
wxStaticBoxSizer* sbSizerBodyStyles;
|
||||
sbSizerBodyStyles = new wxStaticBoxSizer( new wxStaticBox( m_PanelUnitsAndBodyStyles, wxID_ANY, _("Body Styles") ), wxVERTICAL );
|
||||
|
||||
m_radioSingle = new wxRadioButton( sbSizerBodyStyles->GetStaticBox(), wxID_ANY, _("Single body style"), wxDefaultPosition, wxDefaultSize, wxRB_GROUP );
|
||||
sbSizerBodyStyles->Add( m_radioSingle, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
|
||||
|
||||
|
||||
sbSizerBodyStyles->Add( 0, 3, 0, wxEXPAND, 5 );
|
||||
|
||||
m_radioDeMorgan = new wxRadioButton( sbSizerBodyStyles->GetStaticBox(), wxID_ANY, _("‘Standard’ and ‘Alternate’ De Morgan body styles"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
sbSizerBodyStyles->Add( m_radioDeMorgan, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
|
||||
|
||||
|
||||
sbSizerBodyStyles->Add( 0, 3, 0, wxEXPAND, 5 );
|
||||
|
||||
m_radioCustom = new wxRadioButton( sbSizerBodyStyles->GetStaticBox(), wxID_ANY, _("Custom body styles:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
sbSizerBodyStyles->Add( m_radioCustom, 0, wxALL, 5 );
|
||||
|
||||
wxBoxSizer* bSizerIndent;
|
||||
bSizerIndent = new wxBoxSizer( wxVERTICAL );
|
||||
|
||||
m_bodyStyleNamesGrid = new WX_GRID( sbSizerBodyStyles->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 );
|
||||
|
||||
// Grid
|
||||
m_bodyStyleNamesGrid->CreateGrid( 0, 1 );
|
||||
m_bodyStyleNamesGrid->EnableEditing( true );
|
||||
m_bodyStyleNamesGrid->EnableGridLines( true );
|
||||
m_bodyStyleNamesGrid->EnableDragGridSize( false );
|
||||
m_bodyStyleNamesGrid->SetMargins( 0, 0 );
|
||||
|
||||
// Columns
|
||||
m_bodyStyleNamesGrid->SetColSize( 0, 400 );
|
||||
m_bodyStyleNamesGrid->EnableDragColMove( false );
|
||||
m_bodyStyleNamesGrid->EnableDragColSize( false );
|
||||
m_bodyStyleNamesGrid->SetColLabelSize( 0 );
|
||||
m_bodyStyleNamesGrid->SetColLabelAlignment( wxALIGN_CENTER, wxALIGN_CENTER );
|
||||
|
||||
// Rows
|
||||
m_bodyStyleNamesGrid->EnableDragRowSize( false );
|
||||
m_bodyStyleNamesGrid->SetRowLabelSize( 0 );
|
||||
m_bodyStyleNamesGrid->SetRowLabelAlignment( wxALIGN_CENTER, wxALIGN_CENTER );
|
||||
|
||||
// Label Appearance
|
||||
|
||||
// Cell Defaults
|
||||
m_bodyStyleNamesGrid->SetDefaultCellAlignment( wxALIGN_LEFT, wxALIGN_TOP );
|
||||
bSizerIndent->Add( m_bodyStyleNamesGrid, 1, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
|
||||
|
||||
bButtonSize1 = new wxBoxSizer( wxHORIZONTAL );
|
||||
|
||||
m_bpAddBodyStyle = new STD_BITMAP_BUTTON( sbSizerBodyStyles->GetStaticBox(), wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW|0 );
|
||||
m_bpAddBodyStyle->SetToolTip( _("Add field") );
|
||||
|
||||
bButtonSize1->Add( m_bpAddBodyStyle, 0, wxRIGHT|wxLEFT, 5 );
|
||||
|
||||
m_bpMoveUpBodyStyle = new STD_BITMAP_BUTTON( sbSizerBodyStyles->GetStaticBox(), wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW|0 );
|
||||
m_bpMoveUpBodyStyle->SetToolTip( _("Move up") );
|
||||
|
||||
bButtonSize1->Add( m_bpMoveUpBodyStyle, 0, wxRIGHT, 5 );
|
||||
|
||||
m_bpMoveDownBodyStyle = new STD_BITMAP_BUTTON( sbSizerBodyStyles->GetStaticBox(), wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW|0 );
|
||||
m_bpMoveDownBodyStyle->SetToolTip( _("Move down") );
|
||||
|
||||
bButtonSize1->Add( m_bpMoveDownBodyStyle, 0, wxRIGHT, 5 );
|
||||
|
||||
|
||||
bButtonSize1->Add( 20, 0, 0, wxEXPAND, 5 );
|
||||
|
||||
m_bpDeleteBodyStyle = new STD_BITMAP_BUTTON( sbSizerBodyStyles->GetStaticBox(), wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW|0 );
|
||||
m_bpDeleteBodyStyle->SetToolTip( _("Delete field") );
|
||||
|
||||
bButtonSize1->Add( m_bpDeleteBodyStyle, 0, wxRIGHT|wxLEFT, 10 );
|
||||
|
||||
|
||||
bSizerIndent->Add( bButtonSize1, 0, wxEXPAND, 5 );
|
||||
|
||||
|
||||
sbSizerBodyStyles->Add( bSizerIndent, 1, wxEXPAND|wxLEFT, 24 );
|
||||
|
||||
|
||||
bSizerUnitsAndBodyStyles->Add( sbSizerBodyStyles, 1, wxEXPAND|wxALL, 10 );
|
||||
|
||||
|
||||
m_PanelUnitsAndBodyStyles->SetSizer( bSizerUnitsAndBodyStyles );
|
||||
m_PanelUnitsAndBodyStyles->Layout();
|
||||
bSizerUnitsAndBodyStyles->Fit( m_PanelUnitsAndBodyStyles );
|
||||
m_NoteBook->AddPage( m_PanelUnitsAndBodyStyles, _("Units && Body Styles"), false );
|
||||
m_PanelFootprintFilters = new wxPanel( m_NoteBook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
|
||||
wxBoxSizer* bSizerFPFilters;
|
||||
bSizerFPFilters = new wxBoxSizer( wxHORIZONTAL );
|
||||
|
||||
wxBoxSizer* bFPFiltersMargins;
|
||||
bFPFiltersMargins = new wxBoxSizer( wxVERTICAL );
|
||||
|
||||
m_staticTextFootprints = new wxStaticText( m_PanelFootprintFilters, wxID_ANY, _("Footprint filters:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_staticTextFootprints->Wrap( -1 );
|
||||
m_staticTextFootprints->SetToolTip( _("A list of footprints names that can be used for this symbol.\nFootprints names can used wildcards like sm* to allow all footprints names starting by sm.") );
|
||||
|
||||
bFpFilterLeftBoxSizer->Add( m_staticTextFootprints, 0, wxRIGHT|wxLEFT, 5 );
|
||||
bFPFiltersMargins->Add( m_staticTextFootprints, 0, wxRIGHT|wxLEFT, 5 );
|
||||
|
||||
m_FootprintFilterListBox = new wxListBox( m_PanelFootprintFilter, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0, NULL, wxLB_MULTIPLE );
|
||||
bFpFilterLeftBoxSizer->Add( m_FootprintFilterListBox, 1, wxEXPAND|wxRIGHT|wxLEFT, 5 );
|
||||
m_FootprintFilterListBox = new wxListBox( m_PanelFootprintFilters, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0, NULL, wxLB_MULTIPLE );
|
||||
bFPFiltersMargins->Add( m_FootprintFilterListBox, 1, wxEXPAND|wxRIGHT|wxLEFT, 5 );
|
||||
|
||||
wxBoxSizer* bFpFilterRightBoxSizer;
|
||||
bFpFilterRightBoxSizer = new wxBoxSizer( wxHORIZONTAL );
|
||||
|
||||
m_addFilterButton = new STD_BITMAP_BUTTON( m_PanelFootprintFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), wxBU_AUTODRAW|0 );
|
||||
m_addFilterButton = new STD_BITMAP_BUTTON( m_PanelFootprintFilters, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), wxBU_AUTODRAW|0 );
|
||||
m_addFilterButton->SetToolTip( _("Add footprint filter") );
|
||||
|
||||
bFpFilterRightBoxSizer->Add( m_addFilterButton, 0, wxTOP|wxBOTTOM|wxLEFT, 5 );
|
||||
|
||||
m_editFilterButton = new STD_BITMAP_BUTTON( m_PanelFootprintFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), wxBU_AUTODRAW|0 );
|
||||
m_editFilterButton = new STD_BITMAP_BUTTON( m_PanelFootprintFilters, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), wxBU_AUTODRAW|0 );
|
||||
m_editFilterButton->SetToolTip( _("Edit footprint filter") );
|
||||
|
||||
bFpFilterRightBoxSizer->Add( m_editFilterButton, 0, wxALL, 5 );
|
||||
@ -333,94 +463,97 @@ DIALOG_LIB_SYMBOL_PROPERTIES_BASE::DIALOG_LIB_SYMBOL_PROPERTIES_BASE( wxWindow*
|
||||
|
||||
bFpFilterRightBoxSizer->Add( 20, 0, 0, wxEXPAND, 5 );
|
||||
|
||||
m_deleteFilterButton = new STD_BITMAP_BUTTON( m_PanelFootprintFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), wxBU_AUTODRAW|0 );
|
||||
m_deleteFilterButton = new STD_BITMAP_BUTTON( m_PanelFootprintFilters, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), wxBU_AUTODRAW|0 );
|
||||
m_deleteFilterButton->SetToolTip( _("Delete footprint filter") );
|
||||
|
||||
bFpFilterRightBoxSizer->Add( m_deleteFilterButton, 0, wxALL, 5 );
|
||||
|
||||
|
||||
bFpFilterLeftBoxSizer->Add( bFpFilterRightBoxSizer, 0, 0, 5 );
|
||||
bFPFiltersMargins->Add( bFpFilterRightBoxSizer, 0, 0, 5 );
|
||||
|
||||
|
||||
bPanelFpFilterBoxSizer->Add( bFpFilterLeftBoxSizer, 1, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 );
|
||||
bSizerFPFilters->Add( bFPFiltersMargins, 1, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 );
|
||||
|
||||
|
||||
m_PanelFootprintFilter->SetSizer( bPanelFpFilterBoxSizer );
|
||||
m_PanelFootprintFilter->Layout();
|
||||
bPanelFpFilterBoxSizer->Fit( m_PanelFootprintFilter );
|
||||
m_NoteBook->AddPage( m_PanelFootprintFilter, _("Footprint Filters"), false );
|
||||
m_PanelFootprintFilters->SetSizer( bSizerFPFilters );
|
||||
m_PanelFootprintFilters->Layout();
|
||||
bSizerFPFilters->Fit( m_PanelFootprintFilters );
|
||||
m_NoteBook->AddPage( m_PanelFootprintFilters, _("Footprint Filters"), false );
|
||||
m_PanelPinConnections = new wxPanel( m_NoteBook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
|
||||
wxBoxSizer* bSizer19;
|
||||
bSizer19 = new wxBoxSizer( wxVERTICAL );
|
||||
wxBoxSizer* bSizerPinConnections;
|
||||
bSizerPinConnections = new wxBoxSizer( wxVERTICAL );
|
||||
|
||||
m_cbDuplicatePinsAreJumpers = new wxCheckBox( m_PanelPinConnections, wxID_ANY, _("Pins with duplicate numbers are jumpers"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_cbDuplicatePinsAreJumpers->SetToolTip( _("When enabled, this symbol can have more than one pin with the same number, and pins with the same number will be considered to be jumpered together internally.") );
|
||||
|
||||
bSizer19->Add( m_cbDuplicatePinsAreJumpers, 0, wxALL, 5 );
|
||||
bSizerPinConnections->Add( m_cbDuplicatePinsAreJumpers, 0, wxALL, 5 );
|
||||
|
||||
|
||||
bSizerPinConnections->Add( 0, 3, 0, wxEXPAND, 5 );
|
||||
|
||||
wxStaticBoxSizer* sbJumperPinGroups;
|
||||
sbJumperPinGroups = new wxStaticBoxSizer( new wxStaticBox( m_PanelPinConnections, wxID_ANY, _("Jumper Pin Groups") ), wxVERTICAL );
|
||||
|
||||
wxBoxSizer* bSizer20;
|
||||
bSizer20 = new wxBoxSizer( wxHORIZONTAL );
|
||||
wxBoxSizer* bSizerMargins;
|
||||
bSizerMargins = new wxBoxSizer( wxHORIZONTAL );
|
||||
|
||||
wxBoxSizer* bSizer22;
|
||||
bSizer22 = new wxBoxSizer( wxVERTICAL );
|
||||
wxBoxSizer* bSizerLeft;
|
||||
bSizerLeft = new wxBoxSizer( wxVERTICAL );
|
||||
|
||||
stLabelAvailablePins = new wxStaticText( sbJumperPinGroups->GetStaticBox(), wxID_ANY, _("Available pins"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
stLabelAvailablePins = new wxStaticText( sbJumperPinGroups->GetStaticBox(), wxID_ANY, _("Available pins:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
stLabelAvailablePins->Wrap( -1 );
|
||||
bSizer22->Add( stLabelAvailablePins, 0, wxALL, 5 );
|
||||
bSizerLeft->Add( stLabelAvailablePins, 0, wxRIGHT|wxLEFT, 4 );
|
||||
|
||||
m_listAvailablePins = new wxListBox( sbJumperPinGroups->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, 0, NULL, wxLB_EXTENDED|wxLB_SORT );
|
||||
m_listAvailablePins->SetMinSize( wxSize( 200,-1 ) );
|
||||
|
||||
bSizer22->Add( m_listAvailablePins, 1, wxALL|wxEXPAND, 5 );
|
||||
bSizerLeft->Add( m_listAvailablePins, 1, wxALL|wxEXPAND, 2 );
|
||||
|
||||
|
||||
bSizer20->Add( bSizer22, 1, wxEXPAND, 5 );
|
||||
bSizerMargins->Add( bSizerLeft, 1, wxEXPAND, 5 );
|
||||
|
||||
wxBoxSizer* bSizer21;
|
||||
bSizer21 = new wxBoxSizer( wxVERTICAL );
|
||||
wxBoxSizer* bSizerCenter;
|
||||
bSizerCenter = new wxBoxSizer( wxVERTICAL );
|
||||
|
||||
m_btnCreateJumperPinGroup = new wxBitmapButton( sbJumperPinGroups->GetStaticBox(), wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW|0 );
|
||||
m_btnCreateJumperPinGroup->SetToolTip( _("Create jumper group from the selected pins") );
|
||||
|
||||
bSizer21->Add( m_btnCreateJumperPinGroup, 0, wxALL, 5 );
|
||||
bSizerCenter->Add( m_btnCreateJumperPinGroup, 0, wxALL, 5 );
|
||||
|
||||
m_btnRemoveJumperPinGroup = new wxBitmapButton( sbJumperPinGroups->GetStaticBox(), wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW|0 );
|
||||
m_btnRemoveJumperPinGroup->SetToolTip( _("Remove the selected jumper pin group") );
|
||||
|
||||
bSizer21->Add( m_btnRemoveJumperPinGroup, 0, wxALL, 5 );
|
||||
bSizerCenter->Add( m_btnRemoveJumperPinGroup, 0, wxALL, 5 );
|
||||
|
||||
|
||||
bSizer20->Add( bSizer21, 0, wxALIGN_CENTER_VERTICAL, 5 );
|
||||
bSizerMargins->Add( bSizerCenter, 0, wxALIGN_CENTER_VERTICAL, 5 );
|
||||
|
||||
wxBoxSizer* bSizer23;
|
||||
bSizer23 = new wxBoxSizer( wxVERTICAL );
|
||||
wxBoxSizer* bSizerRight;
|
||||
bSizerRight = new wxBoxSizer( wxVERTICAL );
|
||||
|
||||
stLabelGroups = new wxStaticText( sbJumperPinGroups->GetStaticBox(), wxID_ANY, _("Grouped pins"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
stLabelGroups = new wxStaticText( sbJumperPinGroups->GetStaticBox(), wxID_ANY, _("Grouped pins:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
stLabelGroups->Wrap( -1 );
|
||||
bSizer23->Add( stLabelGroups, 0, wxALL, 5 );
|
||||
bSizerRight->Add( stLabelGroups, 0, wxRIGHT|wxLEFT, 4 );
|
||||
|
||||
m_listJumperPinGroups = new wxListBox( sbJumperPinGroups->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, 0, NULL, wxLB_EXTENDED|wxLB_SORT );
|
||||
m_listJumperPinGroups->SetMinSize( wxSize( 200,-1 ) );
|
||||
|
||||
bSizer23->Add( m_listJumperPinGroups, 1, wxALL|wxEXPAND, 5 );
|
||||
bSizerRight->Add( m_listJumperPinGroups, 1, wxALL|wxEXPAND, 2 );
|
||||
|
||||
|
||||
bSizer20->Add( bSizer23, 1, wxEXPAND, 5 );
|
||||
bSizerMargins->Add( bSizerRight, 1, wxEXPAND, 5 );
|
||||
|
||||
|
||||
sbJumperPinGroups->Add( bSizer20, 1, wxEXPAND, 5 );
|
||||
sbJumperPinGroups->Add( bSizerMargins, 1, wxEXPAND|wxTOP, 2 );
|
||||
|
||||
|
||||
bSizer19->Add( sbJumperPinGroups, 1, wxALL|wxTOP, 5 );
|
||||
bSizerPinConnections->Add( sbJumperPinGroups, 1, wxALL|wxTOP, 5 );
|
||||
|
||||
|
||||
m_PanelPinConnections->SetSizer( bSizer19 );
|
||||
m_PanelPinConnections->SetSizer( bSizerPinConnections );
|
||||
m_PanelPinConnections->Layout();
|
||||
bSizer19->Fit( m_PanelPinConnections );
|
||||
m_NoteBook->AddPage( m_PanelPinConnections, _("Pin Connections"), true );
|
||||
bSizerPinConnections->Fit( m_PanelPinConnections );
|
||||
m_NoteBook->AddPage( m_PanelPinConnections, _("Pin Connections"), false );
|
||||
|
||||
bUpperSizer->Add( m_NoteBook, 1, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 10 );
|
||||
|
||||
@ -469,10 +602,6 @@ DIALOG_LIB_SYMBOL_PROPERTIES_BASE::DIALOG_LIB_SYMBOL_PROPERTIES_BASE( wxWindow*
|
||||
m_KeywordCtrl->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_LIB_SYMBOL_PROPERTIES_BASE::OnText ), NULL, this );
|
||||
m_inheritanceSelectCombo->Connect( wxEVT_COMMAND_COMBOBOX_SELECTED, wxCommandEventHandler( DIALOG_LIB_SYMBOL_PROPERTIES_BASE::OnCombobox ), NULL, this );
|
||||
m_inheritanceSelectCombo->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_LIB_SYMBOL_PROPERTIES_BASE::OnText ), NULL, this );
|
||||
m_SelNumberOfUnits->Connect( wxEVT_COMMAND_SPINCTRL_UPDATED, wxSpinEventHandler( DIALOG_LIB_SYMBOL_PROPERTIES_BASE::OnSpinCtrl ), NULL, this );
|
||||
m_SelNumberOfUnits->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_LIB_SYMBOL_PROPERTIES_BASE::OnSpinCtrlText ), NULL, this );
|
||||
m_OptionPartsInterchangeable->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_LIB_SYMBOL_PROPERTIES_BASE::OnCheckBox ), NULL, this );
|
||||
m_hasAlternateBodyStyles->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_LIB_SYMBOL_PROPERTIES_BASE::OnCheckBox ), NULL, this );
|
||||
m_OptionPower->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_LIB_SYMBOL_PROPERTIES_BASE::onPowerCheckBox ), NULL, this );
|
||||
m_OptionLocalPower->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_LIB_SYMBOL_PROPERTIES_BASE::onPowerCheckBox ), NULL, this );
|
||||
m_ShowPinNumButt->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_LIB_SYMBOL_PROPERTIES_BASE::OnCheckBox ), NULL, this );
|
||||
@ -482,6 +611,18 @@ DIALOG_LIB_SYMBOL_PROPERTIES_BASE::DIALOG_LIB_SYMBOL_PROPERTIES_BASE( wxWindow*
|
||||
m_excludeFromSimCheckBox->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_LIB_SYMBOL_PROPERTIES_BASE::OnCheckBox ), NULL, this );
|
||||
m_excludeFromBomCheckBox->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_LIB_SYMBOL_PROPERTIES_BASE::OnCheckBox ), NULL, this );
|
||||
m_excludeFromBoardCheckBox->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_LIB_SYMBOL_PROPERTIES_BASE::OnCheckBox ), NULL, this );
|
||||
m_unitSpinCtrl->Connect( wxEVT_KILL_FOCUS, wxFocusEventHandler( DIALOG_LIB_SYMBOL_PROPERTIES_BASE::OnUnitSpinCtrlKillFocus ), NULL, this );
|
||||
m_unitSpinCtrl->Connect( wxEVT_COMMAND_SPINCTRL_UPDATED, wxSpinEventHandler( DIALOG_LIB_SYMBOL_PROPERTIES_BASE::OnUnitSpinCtrl ), NULL, this );
|
||||
m_unitSpinCtrl->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_LIB_SYMBOL_PROPERTIES_BASE::OnUnitSpinCtrlText ), NULL, this );
|
||||
m_unitSpinCtrl->Connect( wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler( DIALOG_LIB_SYMBOL_PROPERTIES_BASE::OnUnitSpinCtrlEnter ), NULL, this );
|
||||
m_OptionPartsInterchangeable->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_LIB_SYMBOL_PROPERTIES_BASE::OnCheckBox ), NULL, this );
|
||||
m_radioSingle->Connect( wxEVT_COMMAND_RADIOBUTTON_SELECTED, wxCommandEventHandler( DIALOG_LIB_SYMBOL_PROPERTIES_BASE::OnBodyStyle ), NULL, this );
|
||||
m_radioDeMorgan->Connect( wxEVT_COMMAND_RADIOBUTTON_SELECTED, wxCommandEventHandler( DIALOG_LIB_SYMBOL_PROPERTIES_BASE::OnBodyStyle ), NULL, this );
|
||||
m_radioCustom->Connect( wxEVT_COMMAND_RADIOBUTTON_SELECTED, wxCommandEventHandler( DIALOG_LIB_SYMBOL_PROPERTIES_BASE::OnBodyStyle ), NULL, this );
|
||||
m_bpAddBodyStyle->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_LIB_SYMBOL_PROPERTIES_BASE::OnAddBodyStyle ), NULL, this );
|
||||
m_bpMoveUpBodyStyle->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_LIB_SYMBOL_PROPERTIES_BASE::OnBodyStyleMoveUp ), NULL, this );
|
||||
m_bpMoveDownBodyStyle->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_LIB_SYMBOL_PROPERTIES_BASE::OnBodyStyleMoveDown ), NULL, this );
|
||||
m_bpDeleteBodyStyle->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_LIB_SYMBOL_PROPERTIES_BASE::OnDeleteBodyStyle ), NULL, this );
|
||||
m_FootprintFilterListBox->Connect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( DIALOG_LIB_SYMBOL_PROPERTIES_BASE::OnFpFilterDClick ), NULL, this );
|
||||
m_FootprintFilterListBox->Connect( wxEVT_COMMAND_LISTBOX_DOUBLECLICKED, wxCommandEventHandler( DIALOG_LIB_SYMBOL_PROPERTIES_BASE::OnEditFootprintFilter ), NULL, this );
|
||||
m_addFilterButton->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_LIB_SYMBOL_PROPERTIES_BASE::OnAddFootprintFilter ), NULL, this );
|
||||
@ -509,10 +650,6 @@ DIALOG_LIB_SYMBOL_PROPERTIES_BASE::~DIALOG_LIB_SYMBOL_PROPERTIES_BASE()
|
||||
m_KeywordCtrl->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_LIB_SYMBOL_PROPERTIES_BASE::OnText ), NULL, this );
|
||||
m_inheritanceSelectCombo->Disconnect( wxEVT_COMMAND_COMBOBOX_SELECTED, wxCommandEventHandler( DIALOG_LIB_SYMBOL_PROPERTIES_BASE::OnCombobox ), NULL, this );
|
||||
m_inheritanceSelectCombo->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_LIB_SYMBOL_PROPERTIES_BASE::OnText ), NULL, this );
|
||||
m_SelNumberOfUnits->Disconnect( wxEVT_COMMAND_SPINCTRL_UPDATED, wxSpinEventHandler( DIALOG_LIB_SYMBOL_PROPERTIES_BASE::OnSpinCtrl ), NULL, this );
|
||||
m_SelNumberOfUnits->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_LIB_SYMBOL_PROPERTIES_BASE::OnSpinCtrlText ), NULL, this );
|
||||
m_OptionPartsInterchangeable->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_LIB_SYMBOL_PROPERTIES_BASE::OnCheckBox ), NULL, this );
|
||||
m_hasAlternateBodyStyles->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_LIB_SYMBOL_PROPERTIES_BASE::OnCheckBox ), NULL, this );
|
||||
m_OptionPower->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_LIB_SYMBOL_PROPERTIES_BASE::onPowerCheckBox ), NULL, this );
|
||||
m_OptionLocalPower->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_LIB_SYMBOL_PROPERTIES_BASE::onPowerCheckBox ), NULL, this );
|
||||
m_ShowPinNumButt->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_LIB_SYMBOL_PROPERTIES_BASE::OnCheckBox ), NULL, this );
|
||||
@ -522,6 +659,18 @@ DIALOG_LIB_SYMBOL_PROPERTIES_BASE::~DIALOG_LIB_SYMBOL_PROPERTIES_BASE()
|
||||
m_excludeFromSimCheckBox->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_LIB_SYMBOL_PROPERTIES_BASE::OnCheckBox ), NULL, this );
|
||||
m_excludeFromBomCheckBox->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_LIB_SYMBOL_PROPERTIES_BASE::OnCheckBox ), NULL, this );
|
||||
m_excludeFromBoardCheckBox->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_LIB_SYMBOL_PROPERTIES_BASE::OnCheckBox ), NULL, this );
|
||||
m_unitSpinCtrl->Disconnect( wxEVT_KILL_FOCUS, wxFocusEventHandler( DIALOG_LIB_SYMBOL_PROPERTIES_BASE::OnUnitSpinCtrlKillFocus ), NULL, this );
|
||||
m_unitSpinCtrl->Disconnect( wxEVT_COMMAND_SPINCTRL_UPDATED, wxSpinEventHandler( DIALOG_LIB_SYMBOL_PROPERTIES_BASE::OnUnitSpinCtrl ), NULL, this );
|
||||
m_unitSpinCtrl->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_LIB_SYMBOL_PROPERTIES_BASE::OnUnitSpinCtrlText ), NULL, this );
|
||||
m_unitSpinCtrl->Disconnect( wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler( DIALOG_LIB_SYMBOL_PROPERTIES_BASE::OnUnitSpinCtrlEnter ), NULL, this );
|
||||
m_OptionPartsInterchangeable->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_LIB_SYMBOL_PROPERTIES_BASE::OnCheckBox ), NULL, this );
|
||||
m_radioSingle->Disconnect( wxEVT_COMMAND_RADIOBUTTON_SELECTED, wxCommandEventHandler( DIALOG_LIB_SYMBOL_PROPERTIES_BASE::OnBodyStyle ), NULL, this );
|
||||
m_radioDeMorgan->Disconnect( wxEVT_COMMAND_RADIOBUTTON_SELECTED, wxCommandEventHandler( DIALOG_LIB_SYMBOL_PROPERTIES_BASE::OnBodyStyle ), NULL, this );
|
||||
m_radioCustom->Disconnect( wxEVT_COMMAND_RADIOBUTTON_SELECTED, wxCommandEventHandler( DIALOG_LIB_SYMBOL_PROPERTIES_BASE::OnBodyStyle ), NULL, this );
|
||||
m_bpAddBodyStyle->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_LIB_SYMBOL_PROPERTIES_BASE::OnAddBodyStyle ), NULL, this );
|
||||
m_bpMoveUpBodyStyle->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_LIB_SYMBOL_PROPERTIES_BASE::OnBodyStyleMoveUp ), NULL, this );
|
||||
m_bpMoveDownBodyStyle->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_LIB_SYMBOL_PROPERTIES_BASE::OnBodyStyleMoveDown ), NULL, this );
|
||||
m_bpDeleteBodyStyle->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_LIB_SYMBOL_PROPERTIES_BASE::OnDeleteBodyStyle ), NULL, this );
|
||||
m_FootprintFilterListBox->Disconnect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( DIALOG_LIB_SYMBOL_PROPERTIES_BASE::OnFpFilterDClick ), NULL, this );
|
||||
m_FootprintFilterListBox->Disconnect( wxEVT_COMMAND_LISTBOX_DOUBLECLICKED, wxCommandEventHandler( DIALOG_LIB_SYMBOL_PROPERTIES_BASE::OnEditFootprintFilter ), NULL, this );
|
||||
m_addFilterButton->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_LIB_SYMBOL_PROPERTIES_BASE::OnAddFootprintFilter ), NULL, this );
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -30,9 +30,10 @@ class WX_GRID;
|
||||
#include <wx/stattext.h>
|
||||
#include <wx/textctrl.h>
|
||||
#include <wx/combobox.h>
|
||||
#include <wx/spinctrl.h>
|
||||
#include <wx/checkbox.h>
|
||||
#include <wx/panel.h>
|
||||
#include <wx/spinctrl.h>
|
||||
#include <wx/radiobut.h>
|
||||
#include <wx/listbox.h>
|
||||
#include <wx/notebook.h>
|
||||
#include <wx/dialog.h>
|
||||
@ -63,10 +64,6 @@ class DIALOG_LIB_SYMBOL_PROPERTIES_BASE : public DIALOG_SHIM
|
||||
wxStaticText* m_inheritsStaticText;
|
||||
wxComboBox* m_inheritanceSelectCombo;
|
||||
wxBoxSizer* bSizerLowerBasicPanel;
|
||||
wxStaticText* m_staticTextNbUnits;
|
||||
wxSpinCtrl* m_SelNumberOfUnits;
|
||||
wxCheckBox* m_OptionPartsInterchangeable;
|
||||
wxCheckBox* m_hasAlternateBodyStyles;
|
||||
wxCheckBox* m_OptionPower;
|
||||
wxCheckBox* m_OptionLocalPower;
|
||||
wxCheckBox* m_ShowPinNumButt;
|
||||
@ -78,7 +75,22 @@ class DIALOG_LIB_SYMBOL_PROPERTIES_BASE : public DIALOG_SHIM
|
||||
wxCheckBox* m_excludeFromSimCheckBox;
|
||||
wxCheckBox* m_excludeFromBomCheckBox;
|
||||
wxCheckBox* m_excludeFromBoardCheckBox;
|
||||
wxPanel* m_PanelFootprintFilter;
|
||||
wxPanel* m_PanelUnitsAndBodyStyles;
|
||||
wxStaticText* m_staticTextNbUnits;
|
||||
wxSpinCtrl* m_unitSpinCtrl;
|
||||
wxCheckBox* m_OptionPartsInterchangeable;
|
||||
wxStaticText* m_unitNamesLabel;
|
||||
WX_GRID* m_unitNamesGrid;
|
||||
wxRadioButton* m_radioSingle;
|
||||
wxRadioButton* m_radioDeMorgan;
|
||||
wxRadioButton* m_radioCustom;
|
||||
WX_GRID* m_bodyStyleNamesGrid;
|
||||
wxBoxSizer* bButtonSize1;
|
||||
STD_BITMAP_BUTTON* m_bpAddBodyStyle;
|
||||
STD_BITMAP_BUTTON* m_bpMoveUpBodyStyle;
|
||||
STD_BITMAP_BUTTON* m_bpMoveDownBodyStyle;
|
||||
STD_BITMAP_BUTTON* m_bpDeleteBodyStyle;
|
||||
wxPanel* m_PanelFootprintFilters;
|
||||
wxStaticText* m_staticTextFootprints;
|
||||
wxListBox* m_FootprintFilterListBox;
|
||||
STD_BITMAP_BUTTON* m_addFilterButton;
|
||||
@ -109,10 +121,17 @@ class DIALOG_LIB_SYMBOL_PROPERTIES_BASE : public DIALOG_SHIM
|
||||
virtual void OnSymbolNameText( wxCommandEvent& event ) { event.Skip(); }
|
||||
virtual void OnText( wxCommandEvent& event ) { event.Skip(); }
|
||||
virtual void OnCombobox( wxCommandEvent& event ) { event.Skip(); }
|
||||
virtual void OnSpinCtrl( wxSpinEvent& event ) { event.Skip(); }
|
||||
virtual void OnSpinCtrlText( wxCommandEvent& event ) { event.Skip(); }
|
||||
virtual void OnCheckBox( wxCommandEvent& event ) { event.Skip(); }
|
||||
virtual void onPowerCheckBox( wxCommandEvent& event ) { event.Skip(); }
|
||||
virtual void OnCheckBox( wxCommandEvent& event ) { event.Skip(); }
|
||||
virtual void OnUnitSpinCtrlKillFocus( wxFocusEvent& event ) { event.Skip(); }
|
||||
virtual void OnUnitSpinCtrl( wxSpinEvent& event ) { event.Skip(); }
|
||||
virtual void OnUnitSpinCtrlText( wxCommandEvent& event ) { event.Skip(); }
|
||||
virtual void OnUnitSpinCtrlEnter( wxCommandEvent& event ) { event.Skip(); }
|
||||
virtual void OnBodyStyle( wxCommandEvent& event ) { event.Skip(); }
|
||||
virtual void OnAddBodyStyle( wxCommandEvent& event ) { event.Skip(); }
|
||||
virtual void OnBodyStyleMoveUp( wxCommandEvent& event ) { event.Skip(); }
|
||||
virtual void OnBodyStyleMoveDown( wxCommandEvent& event ) { event.Skip(); }
|
||||
virtual void OnDeleteBodyStyle( wxCommandEvent& event ) { event.Skip(); }
|
||||
virtual void OnFpFilterDClick( wxMouseEvent& event ) { event.Skip(); }
|
||||
virtual void OnEditFootprintFilter( wxCommandEvent& event ) { event.Skip(); }
|
||||
virtual void OnAddFootprintFilter( wxCommandEvent& event ) { event.Skip(); }
|
||||
|
@ -160,7 +160,7 @@ DIALOG_PIN_PROPERTIES::DIALOG_PIN_PROPERTIES( SYMBOL_EDIT_FRAME* parent, SCH_PIN
|
||||
m_frame->GetCanvas()->GetBackend() );
|
||||
|
||||
m_previewWidget->SetLayoutDirection( wxLayout_LeftToRight );
|
||||
m_previewWidget->DisplayPart( m_dummyParent, m_dummyPin->GetUnit(), 0 );
|
||||
m_previewWidget->DisplayPart( m_dummyParent, m_dummyPin->GetUnit(), m_dummyPin->GetBodyStyle() );
|
||||
|
||||
wxBoxSizer* previewSizer = new wxBoxSizer( wxHORIZONTAL );
|
||||
previewSizer->Add( m_previewWidget, 1, wxEXPAND, 5 );
|
||||
@ -217,12 +217,12 @@ DIALOG_PIN_PROPERTIES::DIALOG_PIN_PROPERTIES( SYMBOL_EDIT_FRAME* parent, SCH_PIN
|
||||
} ) );
|
||||
m_alternatesGrid->SetSelectionMode( wxGrid::wxGridSelectRows );
|
||||
|
||||
if( aPin->GetParentSymbol()->HasAlternateBodyStyle() )
|
||||
if( aPin->GetParentSymbol()->IsMultiBodyStyle() )
|
||||
{
|
||||
m_alternatesTurndown->Collapse();
|
||||
m_alternatesTurndown->Disable();
|
||||
m_alternatesTurndown->SetToolTip( _( "Alternate pin assignments are not available for "
|
||||
"De Morgan symbols." ) );
|
||||
m_alternatesTurndown->SetToolTip( _( "Alternate pin assignments are not available for symbols with "
|
||||
"multiple body styles." ) );
|
||||
}
|
||||
|
||||
// Set special attributes
|
||||
@ -287,8 +287,9 @@ bool DIALOG_PIN_PROPERTIES::TransferDataToWindow()
|
||||
m_textPinNumber->SetValue( m_pin->GetNumber() );
|
||||
m_numberSize.SetValue( m_pin->GetNumberTextSize() );
|
||||
m_pinLength.SetValue( m_pin->GetLength() );
|
||||
m_checkApplyToAllParts->Enable( m_pin->GetParentSymbol()->IsMulti() );
|
||||
m_checkApplyToAllParts->SetValue( m_pin->GetParentSymbol()->IsMulti() && m_pin->GetUnit() == 0 );
|
||||
m_checkApplyToAllParts->Enable( m_pin->GetParentSymbol()->IsMultiUnit() );
|
||||
m_checkApplyToAllParts->SetValue( m_pin->GetParentSymbol()->IsMultiUnit() && m_pin->GetUnit() == 0 );
|
||||
m_checkApplyToAllBodyStyles->Enable( m_pin->GetParentSymbol()->IsMultiBodyStyle() );
|
||||
m_checkApplyToAllBodyStyles->SetValue( m_pin->GetBodyStyle() == 0 );
|
||||
m_checkShow->SetValue( m_pin->IsVisible() );
|
||||
|
||||
@ -321,7 +322,7 @@ bool DIALOG_PIN_PROPERTIES::TransferDataToWindow()
|
||||
commonUnitsToolTip = _( "If checked, this pin will exist in all units." );
|
||||
}
|
||||
|
||||
if( !m_pin->GetParentSymbol()->IsMulti() )
|
||||
if( !m_pin->GetParentSymbol()->IsMultiUnit() )
|
||||
commonUnitsToolTip = _( "This symbol only has one unit. This control has no effect." );
|
||||
|
||||
m_checkApplyToAllParts->SetToolTip( commonUnitsToolTip );
|
||||
@ -418,7 +419,7 @@ void DIALOG_PIN_PROPERTIES::OnPropertiesChange( wxCommandEvent& event )
|
||||
m_infoBar->GetSizer()->Layout();
|
||||
}
|
||||
|
||||
m_previewWidget->DisplayPart( m_dummyParent, m_dummyPin->GetUnit(), 0 );
|
||||
m_previewWidget->DisplayPart( m_dummyParent, m_dummyPin->GetUnit(), m_dummyPin->GetBodyStyle() );
|
||||
}
|
||||
|
||||
|
||||
|
@ -154,7 +154,7 @@ DIALOG_PIN_PROPERTIES_BASE::DIALOG_PIN_PROPERTIES_BASE( wxWindow* parent, wxWind
|
||||
m_checkApplyToAllParts = new wxCheckBox( this, wxID_ANY, _("Common to all &units in symbol"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
checkboxesSizer->Add( m_checkApplyToAllParts, 0, wxBOTTOM, 3 );
|
||||
|
||||
m_checkApplyToAllBodyStyles = new wxCheckBox( this, wxID_ANY, _("Common to all body &styles (De Morgan)"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_checkApplyToAllBodyStyles = new wxCheckBox( this, wxID_ANY, _("Common to all body &styles"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
checkboxesSizer->Add( m_checkApplyToAllBodyStyles, 0, wxBOTTOM, 3 );
|
||||
|
||||
|
||||
|
@ -1948,7 +1948,7 @@
|
||||
<property name="gripper">0</property>
|
||||
<property name="hidden">0</property>
|
||||
<property name="id">wxID_ANY</property>
|
||||
<property name="label">Common to all body &styles (De Morgan)</property>
|
||||
<property name="label">Common to all body &styles</property>
|
||||
<property name="max_size"></property>
|
||||
<property name="maximize_button">0</property>
|
||||
<property name="maximum_size"></property>
|
||||
|
@ -230,17 +230,17 @@ void DIALOG_RESCUE_EACH::displayItemsInConflict()
|
||||
|
||||
if( row < 0 )
|
||||
{
|
||||
m_previewOldWidget->DisplayPart( nullptr, 0 );
|
||||
m_previewNewWidget->DisplayPart( nullptr, 0 );
|
||||
m_previewOldWidget->DisplayPart( nullptr, 0, 0 );
|
||||
m_previewNewWidget->DisplayPart( nullptr, 0, 0 );
|
||||
}
|
||||
else
|
||||
{
|
||||
RESCUE_CANDIDATE& selected_part = m_rescuer->m_all_candidates[row];
|
||||
|
||||
m_previewOldWidget->DisplayPart( selected_part.GetCacheCandidate(), selected_part.GetUnit(),
|
||||
selected_part.GetConvert() );
|
||||
selected_part.GetBodyStyle() );
|
||||
m_previewNewWidget->DisplayPart( selected_part.GetLibCandidate(), selected_part.GetUnit(),
|
||||
selected_part.GetConvert() );
|
||||
selected_part.GetBodyStyle() );
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -190,20 +190,10 @@ bool DIALOG_SHAPE_PROPERTIES::TransferDataToWindow()
|
||||
const SYMBOL* symbol = m_shape->GetParentSymbol();
|
||||
|
||||
m_privateCheckbox->SetValue( m_shape->IsPrivate() );
|
||||
m_checkApplyToAllUnits->SetValue( symbol->GetUnitCount() > 1 && m_shape->GetUnit() == 0 );
|
||||
m_checkApplyToAllUnits->Enable( symbol->GetUnitCount() > 1 );
|
||||
m_checkApplyToAllBodyStyles->SetValue( m_shape->GetBodyStyle() == 0 );
|
||||
|
||||
bool enableAlternateBodyStyle = symbol->HasAlternateBodyStyle();
|
||||
|
||||
// If a symbol contains no body-style-specific pins or graphic items,
|
||||
// symbol->HasAlternateBodyStyle() will return false.
|
||||
// But when creating a new symbol, with DeMorgan option set, the m_checkApplyToAllBodyStyles
|
||||
// must be enabled in order to be able to create graphic items shared by all body styles.
|
||||
if( symbolEditor->GetShowDeMorgan() )
|
||||
enableAlternateBodyStyle = true;
|
||||
|
||||
m_checkApplyToAllBodyStyles->Enable( enableAlternateBodyStyle );
|
||||
m_checkApplyToAllUnits->SetValue( symbol->IsMultiUnit() && m_shape->GetUnit() == 0 );
|
||||
m_checkApplyToAllUnits->Enable( symbol->IsMultiUnit() );
|
||||
m_checkApplyToAllBodyStyles->SetValue( symbol->IsMultiBodyStyle() && m_shape->GetBodyStyle() == 0 );
|
||||
m_checkApplyToAllBodyStyles->Enable( symbol->IsMultiBodyStyle() );
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -251,7 +251,7 @@ DIALOG_SHAPE_PROPERTIES_BASE::DIALOG_SHAPE_PROPERTIES_BASE( wxWindow* parent, wx
|
||||
m_checkApplyToAllUnits = new wxCheckBox( this, wxID_ANY, _("Common to all &units in symbol"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
bRight2->Add( m_checkApplyToAllUnits, 0, wxTOP|wxRIGHT, 5 );
|
||||
|
||||
m_checkApplyToAllBodyStyles = new wxCheckBox( this, wxID_ANY, _("Common to all body &styles (De Morgan)"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_checkApplyToAllBodyStyles = new wxCheckBox( this, wxID_ANY, _("Common to all body &styles"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
bRight2->Add( m_checkApplyToAllBodyStyles, 0, wxTOP|wxBOTTOM|wxRIGHT, 5 );
|
||||
|
||||
|
||||
|
@ -2320,7 +2320,7 @@
|
||||
<property name="gripper">0</property>
|
||||
<property name="hidden">0</property>
|
||||
<property name="id">wxID_ANY</property>
|
||||
<property name="label">Common to all body &styles (De Morgan)</property>
|
||||
<property name="label">Common to all body &styles</property>
|
||||
<property name="max_size"></property>
|
||||
<property name="maximize_button">0</property>
|
||||
<property name="maximum_size"></property>
|
||||
|
@ -96,8 +96,8 @@ DIALOG_SIM_MODEL<T>::DIALOG_SIM_MODEL( wxWindow* aParent, EDA_BASE_FRAME* aFrame
|
||||
|
||||
for( SCH_PIN* pin : aSymbol.GetPins() )
|
||||
{
|
||||
// De Morgan conversions are equivalences, not additional items to simulate
|
||||
if( !pin->GetParentSymbol()->HasAlternateBodyStyle() || pin->GetBodyStyle() < 2 )
|
||||
// Body styles (including De Morgan variants) are equivalences, not additional items to simulate
|
||||
if( !pin->GetParentSymbol()->IsMultiBodyStyle() || pin->GetBodyStyle() < 2 )
|
||||
m_sortedPartPins.push_back( pin );
|
||||
}
|
||||
|
||||
|
@ -342,13 +342,14 @@ DIALOG_SYMBOL_PROPERTIES::DIALOG_SYMBOL_PROPERTIES( SCH_EDIT_FRAME* aParent, SCH
|
||||
m_shownColumns = m_fieldsGrid->GetShownColumns();
|
||||
}
|
||||
|
||||
if( m_part && m_part->HasAlternateBodyStyle() )
|
||||
if( m_part && m_part->IsMultiBodyStyle() )
|
||||
{
|
||||
// DeMorgan conversions are a subclass of alternate pin assignments, so don't allow
|
||||
// Multiple body styles are a superclass of alternate pin assignments, so don't allow
|
||||
// free-form alternate assignments as well. (We won't know how to map the alternates
|
||||
// back and forth when the conversion is changed.)
|
||||
// back and forth when the body style is changed.)
|
||||
m_pinTablePage->Disable();
|
||||
m_pinTablePage->SetToolTip( _( "Alternate pin assignments are not available for De Morgan symbols." ) );
|
||||
m_pinTablePage->SetToolTip( _( "Alternate pin assignments are not available for symbols with multiple "
|
||||
"body styles." ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -472,7 +473,7 @@ bool DIALOG_SYMBOL_PROPERTIES::TransferDataToWindow()
|
||||
AdjustFieldsGridColumns();
|
||||
|
||||
// If a multi-unit symbol, set up the unit selector and interchangeable checkbox.
|
||||
if( m_symbol->GetUnitCount() > 1 )
|
||||
if( m_symbol->IsMultiUnit() )
|
||||
{
|
||||
// Ensure symbol unit is the currently selected unit (mandatory in complex hierarchies)
|
||||
// from the current sheet path, because it can be modified by previous calculations
|
||||
@ -490,14 +491,18 @@ bool DIALOG_SYMBOL_PROPERTIES::TransferDataToWindow()
|
||||
m_unitChoice->Enable( false );
|
||||
}
|
||||
|
||||
if( m_part && m_part->HasAlternateBodyStyle() )
|
||||
if( m_part && m_part->IsMultiBodyStyle() )
|
||||
{
|
||||
if( m_symbol->GetBodyStyle() > BODY_STYLE::BASE )
|
||||
m_cbAlternateSymbol->SetValue( true );
|
||||
for( int ii = 0; ii < m_part->GetBodyStyleCount(); ii++ )
|
||||
m_bodyStyleChoice->Append( m_part->GetBodyStyleNames()[ii] );
|
||||
|
||||
if( m_symbol->GetBodyStyle() <= (int) m_bodyStyleChoice->GetCount() )
|
||||
m_bodyStyleChoice->SetSelection( m_symbol->GetBodyStyle() - 1 );
|
||||
}
|
||||
else
|
||||
{
|
||||
m_cbAlternateSymbol->Enable( false );
|
||||
m_bodyStyle->Enable( false );
|
||||
m_bodyStyleChoice->Enable( false );
|
||||
}
|
||||
|
||||
// Set the symbol orientation and mirroring.
|
||||
@ -517,8 +522,8 @@ bool DIALOG_SYMBOL_PROPERTIES::TransferDataToWindow()
|
||||
switch( mirror )
|
||||
{
|
||||
default: m_mirrorCtrl->SetSelection( 0 ) ; break;
|
||||
case SYM_MIRROR_X: m_mirrorCtrl->SetSelection( 1 ); break;
|
||||
case SYM_MIRROR_Y: m_mirrorCtrl->SetSelection( 2 ); break;
|
||||
case SYM_MIRROR_X: m_mirrorCtrl->SetSelection( 1 ); break;
|
||||
case SYM_MIRROR_Y: m_mirrorCtrl->SetSelection( 2 ); break;
|
||||
}
|
||||
|
||||
m_cbExcludeFromSim->SetValue( m_symbol->GetExcludedFromSim() );
|
||||
@ -681,17 +686,14 @@ bool DIALOG_SYMBOL_PROPERTIES::TransferDataFromWindow()
|
||||
// Save current flags which could be modified by next change settings
|
||||
EDA_ITEM_FLAGS flags = m_symbol->GetFlags();
|
||||
|
||||
// For symbols with multiple shapes (De Morgan representation) Set the selected shape:
|
||||
if( m_cbAlternateSymbol->IsEnabled() && m_cbAlternateSymbol->GetValue() )
|
||||
m_symbol->SetBodyStyle( BODY_STYLE::DEMORGAN );
|
||||
else
|
||||
m_symbol->SetBodyStyle( BODY_STYLE::BASE );
|
||||
|
||||
//Set the part selection in multiple part per package
|
||||
int unit_selection = m_unitChoice->IsEnabled() ? m_unitChoice->GetSelection() + 1 : 1;
|
||||
m_symbol->SetUnitSelection( &GetParent()->GetCurrentSheet(), unit_selection );
|
||||
m_symbol->SetUnit( unit_selection );
|
||||
|
||||
int bodyStyle_selection = m_bodyStyleChoice->IsEnabled() ? m_bodyStyleChoice->GetSelection() + 1 : 1;
|
||||
m_symbol->SetBodyStyle( bodyStyle_selection );
|
||||
|
||||
switch( m_orientationCtrl->GetSelection() )
|
||||
{
|
||||
case 0: m_symbol->SetOrientation( SYM_ORIENT_0 ); break;
|
||||
|
@ -139,12 +139,16 @@ DIALOG_SYMBOL_PROPERTIES_BASE::DIALOG_SYMBOL_PROPERTIES_BASE( wxWindow* parent,
|
||||
m_unitChoice->SetSelection( 0 );
|
||||
m_unitChoice->SetMinSize( wxSize( 100,-1 ) );
|
||||
|
||||
gbSizer1->Add( m_unitChoice, wxGBPosition( 0, 1 ), wxGBSpan( 1, 1 ), wxEXPAND|wxLEFT|wxRIGHT, 5 );
|
||||
gbSizer1->Add( m_unitChoice, wxGBPosition( 0, 1 ), wxGBSpan( 1, 1 ), wxEXPAND|wxRIGHT, 5 );
|
||||
|
||||
m_cbAlternateSymbol = new wxCheckBox( sbGeneralProps->GetStaticBox(), wxID_ANY, _("Alternate symbol (De Morgan)"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_cbAlternateSymbol->SetToolTip( _("Use the alternate shape of this symbol.\nFor gates, this is the \"De Morgan\" conversion") );
|
||||
m_bodyStyle = new wxStaticText( sbGeneralProps->GetStaticBox(), wxID_ANY, _("Body style:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_bodyStyle->Wrap( -1 );
|
||||
gbSizer1->Add( m_bodyStyle, wxGBPosition( 1, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
|
||||
|
||||
gbSizer1->Add( m_cbAlternateSymbol, wxGBPosition( 1, 0 ), wxGBSpan( 1, 2 ), wxEXPAND|wxLEFT|wxRIGHT|wxTOP, 4 );
|
||||
wxArrayString m_bodyStyleChoiceChoices;
|
||||
m_bodyStyleChoice = new wxChoice( sbGeneralProps->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, m_bodyStyleChoiceChoices, 0 );
|
||||
m_bodyStyleChoice->SetSelection( 0 );
|
||||
gbSizer1->Add( m_bodyStyleChoice, wxGBPosition( 1, 1 ), wxGBSpan( 1, 1 ), wxEXPAND|wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
|
||||
|
||||
m_orientationLabel = new wxStaticText( sbGeneralProps->GetStaticBox(), wxID_ANY, _("Angle:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_orientationLabel->Wrap( -1 );
|
||||
@ -154,7 +158,7 @@ DIALOG_SYMBOL_PROPERTIES_BASE::DIALOG_SYMBOL_PROPERTIES_BASE( wxWindow* parent,
|
||||
int m_orientationCtrlNChoices = sizeof( m_orientationCtrlChoices ) / sizeof( wxString );
|
||||
m_orientationCtrl = new wxChoice( sbGeneralProps->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, m_orientationCtrlNChoices, m_orientationCtrlChoices, 0 );
|
||||
m_orientationCtrl->SetSelection( 0 );
|
||||
gbSizer1->Add( m_orientationCtrl, wxGBPosition( 3, 1 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT|wxEXPAND, 5 );
|
||||
gbSizer1->Add( m_orientationCtrl, wxGBPosition( 3, 1 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxEXPAND|wxRIGHT, 5 );
|
||||
|
||||
m_mirrorLabel = new wxStaticText( sbGeneralProps->GetStaticBox(), wxID_ANY, _("Mirror:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_mirrorLabel->Wrap( -1 );
|
||||
@ -164,7 +168,7 @@ DIALOG_SYMBOL_PROPERTIES_BASE::DIALOG_SYMBOL_PROPERTIES_BASE( wxWindow* parent,
|
||||
int m_mirrorCtrlNChoices = sizeof( m_mirrorCtrlChoices ) / sizeof( wxString );
|
||||
m_mirrorCtrl = new wxChoice( sbGeneralProps->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, m_mirrorCtrlNChoices, m_mirrorCtrlChoices, 0 );
|
||||
m_mirrorCtrl->SetSelection( 0 );
|
||||
gbSizer1->Add( m_mirrorCtrl, wxGBPosition( 4, 1 ), wxGBSpan( 1, 1 ), wxEXPAND|wxLEFT|wxRIGHT, 5 );
|
||||
gbSizer1->Add( m_mirrorCtrl, wxGBPosition( 4, 1 ), wxGBSpan( 1, 1 ), wxEXPAND|wxRIGHT, 5 );
|
||||
|
||||
|
||||
gbSizer1->AddGrowableCol( 1 );
|
||||
@ -351,7 +355,6 @@ DIALOG_SYMBOL_PROPERTIES_BASE::DIALOG_SYMBOL_PROPERTIES_BASE( wxWindow* parent,
|
||||
m_bpMoveDown->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_SYMBOL_PROPERTIES_BASE::OnMoveDown ), NULL, this );
|
||||
m_bpDelete->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_SYMBOL_PROPERTIES_BASE::OnDeleteField ), NULL, this );
|
||||
m_unitChoice->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( DIALOG_SYMBOL_PROPERTIES_BASE::OnUnitChoice ), NULL, this );
|
||||
m_cbAlternateSymbol->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_SYMBOL_PROPERTIES_BASE::OnCheckBox ), NULL, this );
|
||||
m_orientationCtrl->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( DIALOG_SYMBOL_PROPERTIES_BASE::OnChoice ), NULL, this );
|
||||
m_mirrorCtrl->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( DIALOG_SYMBOL_PROPERTIES_BASE::OnChoice ), NULL, this );
|
||||
m_ShowPinNumButt->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_SYMBOL_PROPERTIES_BASE::OnCheckBox ), NULL, this );
|
||||
@ -385,7 +388,6 @@ DIALOG_SYMBOL_PROPERTIES_BASE::~DIALOG_SYMBOL_PROPERTIES_BASE()
|
||||
m_bpMoveDown->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_SYMBOL_PROPERTIES_BASE::OnMoveDown ), NULL, this );
|
||||
m_bpDelete->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_SYMBOL_PROPERTIES_BASE::OnDeleteField ), NULL, this );
|
||||
m_unitChoice->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( DIALOG_SYMBOL_PROPERTIES_BASE::OnUnitChoice ), NULL, this );
|
||||
m_cbAlternateSymbol->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_SYMBOL_PROPERTIES_BASE::OnCheckBox ), NULL, this );
|
||||
m_orientationCtrl->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( DIALOG_SYMBOL_PROPERTIES_BASE::OnChoice ), NULL, this );
|
||||
m_mirrorCtrl->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( DIALOG_SYMBOL_PROPERTIES_BASE::OnChoice ), NULL, this );
|
||||
m_ShowPinNumButt->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_SYMBOL_PROPERTIES_BASE::OnCheckBox ), NULL, this );
|
||||
|
@ -728,7 +728,7 @@
|
||||
<property name="border">5</property>
|
||||
<property name="colspan">1</property>
|
||||
<property name="column">1</property>
|
||||
<property name="flag">wxEXPAND|wxLEFT|wxRIGHT</property>
|
||||
<property name="flag">wxEXPAND|wxRIGHT</property>
|
||||
<property name="row">0</property>
|
||||
<property name="rowspan">1</property>
|
||||
<object class="wxChoice" expanded="false">
|
||||
@ -793,14 +793,14 @@
|
||||
<event name="OnChoice">OnUnitChoice</event>
|
||||
</object>
|
||||
</object>
|
||||
<object class="gbsizeritem" expanded="false">
|
||||
<property name="border">4</property>
|
||||
<property name="colspan">2</property>
|
||||
<object class="gbsizeritem" expanded="true">
|
||||
<property name="border">5</property>
|
||||
<property name="colspan">1</property>
|
||||
<property name="column">0</property>
|
||||
<property name="flag">wxEXPAND|wxLEFT|wxRIGHT|wxTOP</property>
|
||||
<property name="flag">wxALIGN_CENTER_VERTICAL|wxLEFT</property>
|
||||
<property name="row">1</property>
|
||||
<property name="rowspan">1</property>
|
||||
<object class="wxCheckBox" expanded="false">
|
||||
<object class="wxStaticText" expanded="true">
|
||||
<property name="BottomDockable">1</property>
|
||||
<property name="LeftDockable">1</property>
|
||||
<property name="RightDockable">1</property>
|
||||
@ -814,7 +814,6 @@
|
||||
<property name="caption"></property>
|
||||
<property name="caption_visible">1</property>
|
||||
<property name="center_pane">0</property>
|
||||
<property name="checked">0</property>
|
||||
<property name="close_button">1</property>
|
||||
<property name="context_help"></property>
|
||||
<property name="context_menu">1</property>
|
||||
@ -830,7 +829,8 @@
|
||||
<property name="gripper">0</property>
|
||||
<property name="hidden">0</property>
|
||||
<property name="id">wxID_ANY</property>
|
||||
<property name="label">Alternate symbol (De Morgan)</property>
|
||||
<property name="label">Body style:</property>
|
||||
<property name="markup">0</property>
|
||||
<property name="max_size"></property>
|
||||
<property name="maximize_button">0</property>
|
||||
<property name="maximum_size"></property>
|
||||
@ -838,7 +838,7 @@
|
||||
<property name="minimize_button">0</property>
|
||||
<property name="minimum_size"></property>
|
||||
<property name="moveable">1</property>
|
||||
<property name="name">m_cbAlternateSymbol</property>
|
||||
<property name="name">m_bodyStyle</property>
|
||||
<property name="pane_border">1</property>
|
||||
<property name="pane_position"></property>
|
||||
<property name="pane_size"></property>
|
||||
@ -849,9 +849,74 @@
|
||||
<property name="show">1</property>
|
||||
<property name="size"></property>
|
||||
<property name="style"></property>
|
||||
<property name="subclass"></property>
|
||||
<property name="subclass">; ; forward_declare</property>
|
||||
<property name="toolbar_pane">0</property>
|
||||
<property name="tooltip">Use the alternate shape of this symbol.
For gates, this is the "De Morgan" conversion</property>
|
||||
<property name="tooltip"></property>
|
||||
<property name="window_extra_style"></property>
|
||||
<property name="window_name"></property>
|
||||
<property name="window_style"></property>
|
||||
<property name="wrap">-1</property>
|
||||
</object>
|
||||
</object>
|
||||
<object class="gbsizeritem" expanded="true">
|
||||
<property name="border">5</property>
|
||||
<property name="colspan">1</property>
|
||||
<property name="column">1</property>
|
||||
<property name="flag">wxEXPAND|wxALIGN_CENTER_VERTICAL|wxRIGHT</property>
|
||||
<property name="row">1</property>
|
||||
<property name="rowspan">1</property>
|
||||
<object class="wxChoice" expanded="true">
|
||||
<property name="BottomDockable">1</property>
|
||||
<property name="LeftDockable">1</property>
|
||||
<property name="RightDockable">1</property>
|
||||
<property name="TopDockable">1</property>
|
||||
<property name="aui_layer">0</property>
|
||||
<property name="aui_name"></property>
|
||||
<property name="aui_position">0</property>
|
||||
<property name="aui_row">0</property>
|
||||
<property name="best_size"></property>
|
||||
<property name="bg"></property>
|
||||
<property name="caption"></property>
|
||||
<property name="caption_visible">1</property>
|
||||
<property name="center_pane">0</property>
|
||||
<property name="choices"></property>
|
||||
<property name="close_button">1</property>
|
||||
<property name="context_help"></property>
|
||||
<property name="context_menu">1</property>
|
||||
<property name="default_pane">0</property>
|
||||
<property name="dock">Dock</property>
|
||||
<property name="dock_fixed">0</property>
|
||||
<property name="docking">Left</property>
|
||||
<property name="drag_accept_files">0</property>
|
||||
<property name="enabled">1</property>
|
||||
<property name="fg"></property>
|
||||
<property name="floatable">1</property>
|
||||
<property name="font"></property>
|
||||
<property name="gripper">0</property>
|
||||
<property name="hidden">0</property>
|
||||
<property name="id">wxID_ANY</property>
|
||||
<property name="max_size"></property>
|
||||
<property name="maximize_button">0</property>
|
||||
<property name="maximum_size"></property>
|
||||
<property name="min_size"></property>
|
||||
<property name="minimize_button">0</property>
|
||||
<property name="minimum_size"></property>
|
||||
<property name="moveable">1</property>
|
||||
<property name="name">m_bodyStyleChoice</property>
|
||||
<property name="pane_border">1</property>
|
||||
<property name="pane_position"></property>
|
||||
<property name="pane_size"></property>
|
||||
<property name="permission">protected</property>
|
||||
<property name="pin_button">1</property>
|
||||
<property name="pos"></property>
|
||||
<property name="resize">Resizable</property>
|
||||
<property name="selection">0</property>
|
||||
<property name="show">1</property>
|
||||
<property name="size"></property>
|
||||
<property name="style"></property>
|
||||
<property name="subclass">; ; forward_declare</property>
|
||||
<property name="toolbar_pane">0</property>
|
||||
<property name="tooltip"></property>
|
||||
<property name="validator_data_type"></property>
|
||||
<property name="validator_style">wxFILTER_NONE</property>
|
||||
<property name="validator_type">wxDefaultValidator</property>
|
||||
@ -859,7 +924,6 @@
|
||||
<property name="window_extra_style"></property>
|
||||
<property name="window_name"></property>
|
||||
<property name="window_style"></property>
|
||||
<event name="OnCheckBox">OnCheckBox</event>
|
||||
</object>
|
||||
</object>
|
||||
<object class="gbsizeritem" expanded="false">
|
||||
@ -931,7 +995,7 @@
|
||||
<property name="border">5</property>
|
||||
<property name="colspan">1</property>
|
||||
<property name="column">1</property>
|
||||
<property name="flag">wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT|wxEXPAND</property>
|
||||
<property name="flag">wxALIGN_CENTER_VERTICAL|wxEXPAND|wxRIGHT</property>
|
||||
<property name="row">3</property>
|
||||
<property name="rowspan">1</property>
|
||||
<object class="wxChoice" expanded="false">
|
||||
@ -1065,7 +1129,7 @@
|
||||
<property name="border">5</property>
|
||||
<property name="colspan">1</property>
|
||||
<property name="column">1</property>
|
||||
<property name="flag">wxEXPAND|wxLEFT|wxRIGHT</property>
|
||||
<property name="flag">wxEXPAND|wxRIGHT</property>
|
||||
<property name="row">4</property>
|
||||
<property name="rowspan">1</property>
|
||||
<object class="wxChoice" expanded="false">
|
||||
|
@ -29,8 +29,8 @@ class WX_GRID;
|
||||
#include <wx/statbox.h>
|
||||
#include <wx/stattext.h>
|
||||
#include <wx/choice.h>
|
||||
#include <wx/checkbox.h>
|
||||
#include <wx/gbsizer.h>
|
||||
#include <wx/checkbox.h>
|
||||
#include <wx/panel.h>
|
||||
#include <wx/notebook.h>
|
||||
#include <wx/textctrl.h>
|
||||
@ -55,7 +55,8 @@ class DIALOG_SYMBOL_PROPERTIES_BASE : public DIALOG_SHIM
|
||||
STD_BITMAP_BUTTON* m_bpDelete;
|
||||
wxStaticText* m_unitLabel;
|
||||
wxChoice* m_unitChoice;
|
||||
wxCheckBox* m_cbAlternateSymbol;
|
||||
wxStaticText* m_bodyStyle;
|
||||
wxChoice* m_bodyStyleChoice;
|
||||
wxStaticText* m_orientationLabel;
|
||||
wxChoice* m_orientationCtrl;
|
||||
wxStaticText* m_mirrorLabel;
|
||||
@ -91,8 +92,8 @@ class DIALOG_SYMBOL_PROPERTIES_BASE : public DIALOG_SHIM
|
||||
virtual void OnMoveDown( wxCommandEvent& event ) { event.Skip(); }
|
||||
virtual void OnDeleteField( wxCommandEvent& event ) { event.Skip(); }
|
||||
virtual void OnUnitChoice( wxCommandEvent& event ) { event.Skip(); }
|
||||
virtual void OnCheckBox( wxCommandEvent& event ) { event.Skip(); }
|
||||
virtual void OnChoice( wxCommandEvent& event ) { event.Skip(); }
|
||||
virtual void OnCheckBox( wxCommandEvent& event ) { event.Skip(); }
|
||||
virtual void OnUpdateSymbol( wxCommandEvent& event ) { event.Skip(); }
|
||||
virtual void OnExchangeSymbol( wxCommandEvent& event ) { event.Skip(); }
|
||||
virtual void OnEditSymbol( wxCommandEvent& event ) { event.Skip(); }
|
||||
|
@ -349,11 +349,10 @@ bool DIALOG_TEXT_PROPERTIES::TransferDataToWindow()
|
||||
SYMBOL* symbol = m_currentItem->GetParentSymbol();
|
||||
|
||||
m_privateCheckbox->SetValue( m_currentItem->IsPrivate() );
|
||||
m_commonToAllUnits->SetValue( symbol->IsMulti() && m_currentItem->GetUnit() == 0 );
|
||||
m_commonToAllUnits->Enable( symbol->IsMulti() );
|
||||
m_commonToAllBodyStyles->SetValue( symbol->HasAlternateBodyStyle()
|
||||
&& m_currentItem->GetBodyStyle() == 0 );
|
||||
m_commonToAllBodyStyles->Enable( symbol->HasAlternateBodyStyle() );
|
||||
m_commonToAllUnits->SetValue( symbol->IsMultiUnit() && m_currentItem->GetUnit() == 0 );
|
||||
m_commonToAllUnits->Enable( symbol->IsMultiUnit() );
|
||||
m_commonToAllBodyStyles->SetValue( symbol->IsMultiBodyStyle() && m_currentItem->GetBodyStyle() == 0 );
|
||||
m_commonToAllBodyStyles->Enable( symbol->IsMultiBodyStyle() );
|
||||
}
|
||||
|
||||
return true;
|
||||
|
@ -35,6 +35,11 @@
|
||||
*/
|
||||
#define MAX_UNIT_COUNT_PER_PACKAGE 676
|
||||
|
||||
/**
|
||||
* Purely arbitrary limit.
|
||||
*/
|
||||
#define MAX_BODY_STYLE_PER_PACKAGE 100
|
||||
|
||||
#define MAX_ALT_PIN_FUNCTION_ITEMS 1024
|
||||
|
||||
/**
|
||||
@ -58,11 +63,13 @@ enum id_eeschema_frm
|
||||
|
||||
/* Library editor horizontal toolbar IDs. */
|
||||
ID_LIBEDIT_SELECT_UNIT_NUMBER,
|
||||
ID_LIBEDIT_SELECT_BODY_STYLE,
|
||||
|
||||
/* Library viewer horizontal toolbar IDs */
|
||||
ID_LIBVIEW_NEXT,
|
||||
ID_LIBVIEW_PREVIOUS,
|
||||
ID_LIBVIEW_SELECT_UNIT_NUMBER,
|
||||
ID_LIBVIEW_SELECT_BODY_STYLE,
|
||||
ID_LIBVIEW_LIB_FILTER,
|
||||
ID_LIBVIEW_LIB_LIST,
|
||||
ID_LIBVIEW_SYM_FILTER,
|
||||
@ -85,8 +92,9 @@ enum id_eeschema_frm
|
||||
// to select one unit among MAX_UNIT_COUNT_PER_PACKAGE in popup menu
|
||||
ID_POPUP_SCH_SELECT_UNIT_END = ID_POPUP_SCH_SELECT_UNIT1 + MAX_UNIT_COUNT_PER_PACKAGE,
|
||||
|
||||
ID_POPUP_SCH_SELECT_BASE,
|
||||
ID_POPUP_SCH_SELECT_ALT,
|
||||
ID_POPUP_SCH_SELECT_BODY_STYLE,
|
||||
ID_POPUP_SCH_SELECT_BODY_STYLE1,
|
||||
ID_POPUP_SCH_SELECT_BODY_STYLE_END = ID_POPUP_SCH_SELECT_BODY_STYLE1 + MAX_BODY_STYLE_PER_PACKAGE,
|
||||
|
||||
ID_POPUP_SCH_PIN_TRICKS_START,
|
||||
ID_POPUP_SCH_PIN_TRICKS_NO_CONNECT = ID_POPUP_SCH_PIN_TRICKS_START,
|
||||
|
@ -823,9 +823,8 @@ int EESCHEMA_JOBS_HANDLER::JobExportPythonBom( JOB* aJob )
|
||||
}
|
||||
|
||||
|
||||
int EESCHEMA_JOBS_HANDLER::doSymExportSvg( JOB_SYM_EXPORT_SVG* aSvgJob,
|
||||
SCH_RENDER_SETTINGS* aRenderSettings,
|
||||
LIB_SYMBOL* symbol )
|
||||
int EESCHEMA_JOBS_HANDLER::doSymExportSvg( JOB_SYM_EXPORT_SVG* aSvgJob, SCH_RENDER_SETTINGS* aRenderSettings,
|
||||
LIB_SYMBOL* symbol )
|
||||
{
|
||||
wxCHECK( symbol, CLI::EXIT_CODES::ERR_UNKNOWN );
|
||||
|
||||
@ -845,8 +844,7 @@ int EESCHEMA_JOBS_HANDLER::doSymExportSvg( JOB_SYM_EXPORT_SVG* aSvgJob,
|
||||
// iterate from unit 1, unit 0 would be "all units" which we don't want
|
||||
for( int unit = 1; unit < symbol->GetUnitCount() + 1; unit++ )
|
||||
{
|
||||
for( int bodyStyle = 1; bodyStyle < ( symbol->HasAlternateBodyStyle() ? 2 : 1 ) + 1;
|
||||
++bodyStyle )
|
||||
for( int bodyStyle = 1; bodyStyle <= symbol->GetBodyStyleCount(); ++bodyStyle )
|
||||
{
|
||||
wxString filename;
|
||||
wxFileName fn;
|
||||
@ -864,8 +862,15 @@ int EESCHEMA_JOBS_HANDLER::doSymExportSvg( JOB_SYM_EXPORT_SVG* aSvgJob,
|
||||
// Also avoids aliasing 'sym', unit 2 and 'sym_unit2', unit 1 to the same file.
|
||||
filename += wxString::Format( "_unit%d", unit );
|
||||
|
||||
if( bodyStyle == 2 )
|
||||
filename += wxS( "_demorgan" );
|
||||
if( symbol->HasDeMorganBodyStyles() )
|
||||
{
|
||||
if( bodyStyle == 2 )
|
||||
filename += wxS( "_demorgan" );
|
||||
}
|
||||
else if( bodyStyle <= (int) symbol->GetBodyStyleNames().size() )
|
||||
{
|
||||
filename += wxS( "_" ) + symbol->GetBodyStyleNames()[bodyStyle-1].Lower();
|
||||
}
|
||||
|
||||
fn.SetName( filename );
|
||||
m_reporter->Report( wxString::Format( _( "Plotting symbol '%s' unit %d to '%s'\n" ),
|
||||
|
@ -1195,7 +1195,7 @@ int ERC_TESTER::TestMultUnitPinConflicts()
|
||||
SCH_PIN* pin = static_cast<SCH_PIN*>( item );
|
||||
const SCH_SHEET_PATH& sheet = subgraph->GetSheet();
|
||||
|
||||
if( !pin->GetLibPin()->GetParentSymbol()->IsMulti() )
|
||||
if( !pin->GetLibPin()->GetParentSymbol()->IsMultiUnit() )
|
||||
continue;
|
||||
|
||||
wxString name = pin->GetParentSymbol()->GetRef( &sheet ) +
|
||||
|
@ -91,11 +91,12 @@ struct null_deleter
|
||||
|
||||
|
||||
LIB_SYMBOL::LIB_SYMBOL( const wxString& aName, LIB_SYMBOL* aParent, SYMBOL_LIB* aLibrary ) :
|
||||
SYMBOL( LIB_SYMBOL_T ),
|
||||
m_me( this, null_deleter() )
|
||||
SYMBOL( LIB_SYMBOL_T ),
|
||||
m_me( this, null_deleter() )
|
||||
{
|
||||
m_lastModDate = 0;
|
||||
m_unitCount = 1;
|
||||
m_demorgan = false;
|
||||
m_pinNameOffset = schIUScale.MilsToIU( DEFAULT_PIN_NAME_OFFSET );
|
||||
m_options = ENTRY_NORMAL;
|
||||
m_unitsLocked = false;
|
||||
@ -126,14 +127,15 @@ LIB_SYMBOL::LIB_SYMBOL( const wxString& aName, LIB_SYMBOL* aParent, SYMBOL_LIB*
|
||||
|
||||
|
||||
LIB_SYMBOL::LIB_SYMBOL( const LIB_SYMBOL& aSymbol, SYMBOL_LIB* aLibrary ) :
|
||||
SYMBOL( aSymbol ),
|
||||
EMBEDDED_FILES( aSymbol ),
|
||||
m_me( this, null_deleter() )
|
||||
SYMBOL( aSymbol ),
|
||||
EMBEDDED_FILES( aSymbol ),
|
||||
m_me( this, null_deleter() )
|
||||
{
|
||||
m_library = aLibrary;
|
||||
m_name = aSymbol.m_name;
|
||||
m_fpFilters = wxArrayString( aSymbol.m_fpFilters );
|
||||
m_unitCount = aSymbol.m_unitCount;
|
||||
m_demorgan = aSymbol.m_demorgan;
|
||||
m_unitsLocked = aSymbol.m_unitsLocked;
|
||||
m_lastModDate = aSymbol.m_lastModDate;
|
||||
m_options = aSymbol.m_options;
|
||||
@ -143,7 +145,8 @@ LIB_SYMBOL::LIB_SYMBOL( const LIB_SYMBOL& aSymbol, SYMBOL_LIB* aLibrary ) :
|
||||
std::ranges::copy( aSymbol.m_jumperPinGroups, std::back_inserter( m_jumperPinGroups ) );
|
||||
m_duplicatePinNumbersAreJumpers = aSymbol.m_duplicatePinNumbersAreJumpers;
|
||||
|
||||
aSymbol.CopyUnitDisplayNames( m_unitDisplayNames );
|
||||
m_unitDisplayNames = aSymbol.GetUnitDisplayNames();
|
||||
m_bodyStyleNames = aSymbol.GetBodyStyleNames();
|
||||
|
||||
ClearSelected();
|
||||
|
||||
@ -184,6 +187,7 @@ const LIB_SYMBOL& LIB_SYMBOL::operator=( const LIB_SYMBOL& aSymbol )
|
||||
m_name = aSymbol.m_name;
|
||||
m_fpFilters = wxArrayString( aSymbol.m_fpFilters );
|
||||
m_unitCount = aSymbol.m_unitCount;
|
||||
m_demorgan = aSymbol.m_demorgan;
|
||||
m_unitsLocked = aSymbol.m_unitsLocked;
|
||||
m_lastModDate = aSymbol.m_lastModDate;
|
||||
m_options = aSymbol.m_options;
|
||||
@ -193,8 +197,8 @@ const LIB_SYMBOL& LIB_SYMBOL::operator=( const LIB_SYMBOL& aSymbol )
|
||||
std::ranges::copy( aSymbol.m_jumperPinGroups, std::back_inserter( m_jumperPinGroups ) );
|
||||
m_duplicatePinNumbersAreJumpers = aSymbol.m_duplicatePinNumbersAreJumpers;
|
||||
|
||||
m_unitDisplayNames.clear();
|
||||
aSymbol.CopyUnitDisplayNames( m_unitDisplayNames );
|
||||
m_unitDisplayNames = aSymbol.GetUnitDisplayNames();
|
||||
m_bodyStyleNames = aSymbol.GetBodyStyleNames();
|
||||
|
||||
m_drawings.clear();
|
||||
|
||||
@ -278,12 +282,6 @@ LIB_SYMBOL_SPTR LIB_SYMBOL::GetRootSymbol() const
|
||||
}
|
||||
|
||||
|
||||
bool LIB_SYMBOL::HasUnitDisplayName( int aUnit ) const
|
||||
{
|
||||
return ( m_unitDisplayNames.count( aUnit ) == 1 );
|
||||
}
|
||||
|
||||
|
||||
wxString LIB_SYMBOL::GetUnitDisplayName( int aUnit, bool aLabel ) const
|
||||
{
|
||||
if( m_unitDisplayNames.contains( aUnit ) )
|
||||
@ -297,31 +295,20 @@ wxString LIB_SYMBOL::GetUnitDisplayName( int aUnit, bool aLabel ) const
|
||||
|
||||
wxString LIB_SYMBOL::GetBodyStyleDescription( int aBodyStyle, bool aLabel ) const
|
||||
{
|
||||
if( aBodyStyle == BODY_STYLE::DEMORGAN )
|
||||
return aLabel ? _( "Alternate" ) : wxString( _HKI( "Alternate" ) );
|
||||
else if( aBodyStyle == BODY_STYLE::BASE )
|
||||
return aLabel ? _( "Standard" ) : wxString( _HKI( "Standard" ) );
|
||||
else
|
||||
return wxT( "?" );
|
||||
}
|
||||
|
||||
|
||||
void LIB_SYMBOL::CopyUnitDisplayNames( std::map<int, wxString>& aTarget ) const
|
||||
{
|
||||
for( const auto& it : m_unitDisplayNames )
|
||||
aTarget[it.first] = it.second;
|
||||
}
|
||||
|
||||
|
||||
void LIB_SYMBOL::SetUnitDisplayName( int aUnit, const wxString& aName )
|
||||
{
|
||||
if( aUnit <= GetUnitCount() )
|
||||
if( HasDeMorganBodyStyles() )
|
||||
{
|
||||
if( aName.Length() > 0 )
|
||||
m_unitDisplayNames[aUnit] = aName;
|
||||
else
|
||||
m_unitDisplayNames.erase( aUnit );
|
||||
if( aBodyStyle == BODY_STYLE::DEMORGAN )
|
||||
return aLabel ? _( "Alternate" ) : wxString( _HKI( "Alternate" ) );
|
||||
else if( aBodyStyle == BODY_STYLE::BASE )
|
||||
return aLabel ? _( "Standard" ) : wxString( _HKI( "Standard" ) );
|
||||
}
|
||||
else if( IsMultiBodyStyle() )
|
||||
{
|
||||
if( aBodyStyle <= (int) m_bodyStyleNames.size() )
|
||||
return m_bodyStyleNames[aBodyStyle-1];
|
||||
}
|
||||
|
||||
return wxT( "?" );
|
||||
}
|
||||
|
||||
|
||||
@ -1215,7 +1202,11 @@ void LIB_SYMBOL::Move( const VECTOR2I& aOffset )
|
||||
}
|
||||
|
||||
|
||||
bool LIB_SYMBOL::HasAlternateBodyStyle() const
|
||||
// Before V10 we didn't store the number of body styles in a symbol -- we just looked through all
|
||||
// its drawings each time we wanted to know. This is now only used to set the count when a legacy
|
||||
// symbol is first read. (Legacy symbols also didn't support arbitrary body styles, so the count
|
||||
// is always 1 or 2, and when 2 it is always a De Morgan pair.)
|
||||
bool LIB_SYMBOL::HasLegacyAlternateBodyStyle() const
|
||||
{
|
||||
for( const SCH_ITEM& item : m_drawings )
|
||||
{
|
||||
@ -1387,20 +1378,23 @@ int LIB_SYMBOL::GetUnitCount() const
|
||||
}
|
||||
|
||||
|
||||
void LIB_SYMBOL::SetHasAlternateBodyStyle( bool aHasAlternate, bool aDuplicatePins )
|
||||
void LIB_SYMBOL::SetBodyStyleCount( int aCount, bool aDuplicateDrawItems, bool aDuplicatePins )
|
||||
{
|
||||
if( aHasAlternate == HasAlternateBodyStyle() )
|
||||
if( GetBodyStyleCount() == aCount )
|
||||
return;
|
||||
|
||||
// Duplicate items to create the converted shape
|
||||
if( aHasAlternate )
|
||||
if( GetBodyStyleCount() < aCount )
|
||||
{
|
||||
if( aDuplicatePins )
|
||||
if( aDuplicateDrawItems || aDuplicatePins )
|
||||
{
|
||||
std::vector<SCH_ITEM*> tmp; // Temporarily store the duplicated pins here.
|
||||
|
||||
for( SCH_ITEM& item : m_drawings[ SCH_PIN_T ] )
|
||||
for( SCH_ITEM& item : m_drawings )
|
||||
{
|
||||
if( item.Type() != SCH_PIN_T && !aDuplicateDrawItems )
|
||||
continue;
|
||||
|
||||
if( item.m_bodyStyle == 1 )
|
||||
{
|
||||
SCH_ITEM* newItem = item.Duplicate( IGNORE_PARENT_GROUP );
|
||||
@ -1754,11 +1748,17 @@ int LIB_SYMBOL::Compare( const LIB_SYMBOL& aRhs, int aCompareFlags, REPORTER* aR
|
||||
if( m_unitsLocked != aRhs.m_unitsLocked )
|
||||
return ( m_unitsLocked ) ? 1 : -1;
|
||||
|
||||
// Compare unit display names
|
||||
// Compare unit display names...
|
||||
if( m_unitDisplayNames < aRhs.m_unitDisplayNames )
|
||||
return -1;
|
||||
else if( m_unitDisplayNames > aRhs.m_unitDisplayNames )
|
||||
return 1;
|
||||
|
||||
// ... and body style names.
|
||||
if( m_bodyStyleNames < aRhs.m_bodyStyleNames )
|
||||
return -1;
|
||||
else if( m_bodyStyleNames > aRhs.m_bodyStyleNames )
|
||||
return 1;
|
||||
}
|
||||
|
||||
return retv;
|
||||
@ -1841,6 +1841,11 @@ double LIB_SYMBOL::Similarity( const SCH_ITEM& aOther ) const
|
||||
if( m_unitCount != other.m_unitCount )
|
||||
similarity *= 0.5;
|
||||
|
||||
if( GetBodyStyleCount() != other.GetBodyStyleCount() )
|
||||
similarity *= 0.5;
|
||||
else if( m_bodyStyleNames != other.m_bodyStyleNames )
|
||||
similarity *= 0.9;
|
||||
|
||||
if( m_pinNameOffset != other.m_pinNameOffset )
|
||||
similarity *= 0.9;
|
||||
|
||||
|
@ -89,8 +89,7 @@ public:
|
||||
|
||||
LIB_SYMBOL( const LIB_SYMBOL& aSymbol, SYMBOL_LIB* aLibrary = nullptr );
|
||||
|
||||
virtual ~LIB_SYMBOL()
|
||||
{}
|
||||
virtual ~LIB_SYMBOL() = default;
|
||||
|
||||
/// http://www.boost.org/doc/libs/1_55_0/libs/smart_ptr/sp_techniques.html#weak_without_shared.
|
||||
LIB_SYMBOL_SPTR SharedPtr() const { return m_me; }
|
||||
@ -231,9 +230,9 @@ public:
|
||||
*
|
||||
* @return the symbol bounding box ( in user coordinates )
|
||||
* @param aUnit = unit selection = 0, or 1..n
|
||||
* @param aBodyStyle = 0, 1 or 2
|
||||
* @param aBodyStyle = body style selection = 0, or 1..n
|
||||
* If aUnit == 0, unit is not used
|
||||
* if aBodyStyle == 0 Convert is non used
|
||||
* if aBodyStyle == 0, body style is not used
|
||||
* @param aIgnoreHiddenFields default true, ignores any hidden fields
|
||||
* @param aIgnoreLabelsOnInvisiblePins default true, ignores pin number and pin name
|
||||
* of invisible pins
|
||||
@ -252,9 +251,9 @@ public:
|
||||
*
|
||||
* @return the symbol bounding box ( in user coordinates ) without fields
|
||||
* @param aUnit = unit selection = 0, or 1..n
|
||||
* @param aBodyStyle = 0, 1 or 2
|
||||
* @param aBodyStyle = body style selection = 0, or 1..n
|
||||
* If aUnit == 0, unit is not used
|
||||
* if aBodyStyle == 0 Convert is non used
|
||||
* if aBodyStyle == 0, body style is not used
|
||||
* Fields are not taken in account
|
||||
*/
|
||||
const BOX2I GetBodyBoundingBox( int aUnit, int aBodyStyle, bool aIncludePins,
|
||||
@ -422,9 +421,9 @@ public:
|
||||
* Note pin objects are owned by the draw list of the symbol. Deleting any of the objects
|
||||
* will leave list in a unstable state and will likely segfault when the list is destroyed.
|
||||
*
|
||||
* @param aUnit - Unit number of pins to collect. Set to 0 to get pins from any symbol unit.
|
||||
* @param aUnit - Unit number of pins to collect. Set to 0 to get pins from all symbol units.
|
||||
* @param aBodyStyle - Symbol alternate body style of pins to collect. Set to 0 to get pins
|
||||
* from any DeMorgan variant of symbol.
|
||||
* from all body styles.
|
||||
*/
|
||||
std::vector<SCH_PIN*> GetPins( int aUnit, int aBodyStyle ) const;
|
||||
|
||||
@ -444,8 +443,7 @@ public:
|
||||
*
|
||||
* @param aNumber - Number of the pin to find.
|
||||
* @param aUnit - Unit filter. Set to 0 if a specific unit number is not required.
|
||||
* @param aBodyStyle - DeMorgan variant filter. Set to 0 if no specific DeMorgan variant is
|
||||
* required.
|
||||
* @param aBodyStyle - Body style filter. Set to 0 if no specific body style is not required.
|
||||
* @return The pin object if found. Otherwise NULL.
|
||||
*/
|
||||
SCH_PIN* GetPin( const wxString& aNumber, int aUnit = 0, int aBodyStyle = 0 ) const;
|
||||
@ -472,11 +470,12 @@ public:
|
||||
void Move( const VECTOR2I& aOffset ) override;
|
||||
|
||||
/**
|
||||
* Test if symbol has more than one body conversion type (DeMorgan).
|
||||
*
|
||||
* @return True if symbol has more than one conversion.
|
||||
* Before V10 we didn't store the number of body styles in a symbol -- we just looked through all
|
||||
* its drawings each time we wanted to know. This is now only used to set the count when a legacy
|
||||
* symbol is first read. (Legacy symbols also didn't support arbitrary body styles, so the count
|
||||
* is always 1 or 2, and when 2 it is always a De Morgan pair.)
|
||||
*/
|
||||
bool HasAlternateBodyStyle() const override;
|
||||
bool HasLegacyAlternateBodyStyle() const;
|
||||
|
||||
/**
|
||||
* @return the highest pin number of the symbol's pins.
|
||||
@ -542,14 +541,9 @@ public:
|
||||
* @param aCount - Number of units per package.
|
||||
* @param aDuplicateDrawItems Create duplicate draw items of unit 1 for each additional unit.
|
||||
*/
|
||||
void SetUnitCount( int aCount, bool aDuplicateDrawItems = true );
|
||||
void SetUnitCount( int aCount, bool aDuplicateDrawItems );
|
||||
int GetUnitCount() const override;
|
||||
|
||||
/**
|
||||
* Return true if the given unit \a aUnit has a display name defined
|
||||
*/
|
||||
bool HasUnitDisplayName( int aUnit ) const;
|
||||
|
||||
wxString GetUnitName( int aUnit ) const override
|
||||
{
|
||||
return GetUnitDisplayName( aUnit, true );
|
||||
@ -562,15 +556,8 @@ public:
|
||||
|
||||
wxString GetBodyStyleDescription( int aBodyStyle, bool aLabel ) const override;
|
||||
|
||||
/**
|
||||
* Copy all unit display names into the given map \a aTarget
|
||||
*/
|
||||
void CopyUnitDisplayNames( std::map<int, wxString>& aTarget ) const;
|
||||
|
||||
/**
|
||||
* Set the user-defined display name for \a aUnit to \a aName for symbols with units.
|
||||
*/
|
||||
void SetUnitDisplayName( int aUnit, const wxString& aName );
|
||||
std::map<int, wxString>& GetUnitDisplayNames() { return m_unitDisplayNames; }
|
||||
const std::map<int, wxString>& GetUnitDisplayNames() const { return m_unitDisplayNames; }
|
||||
|
||||
bool GetDuplicatePinNumbersAreJumpers() const { return m_duplicatePinNumbersAreJumpers; }
|
||||
void SetDuplicatePinNumbersAreJumpers( bool aEnabled ) { m_duplicatePinNumbersAreJumpers = aEnabled; }
|
||||
@ -589,10 +576,26 @@ public:
|
||||
* @return true if the symbol has multiple units per symbol.
|
||||
* When true, the reference has a sub reference to identify symbol.
|
||||
*/
|
||||
bool IsMulti() const override { return m_unitCount > 1; }
|
||||
bool IsMultiUnit() const override { return m_unitCount > 1; }
|
||||
|
||||
static wxString LetterSubReference( int aUnit, wxChar aInitialLetter );
|
||||
|
||||
bool IsMultiBodyStyle() const override { return GetBodyStyleCount() > 1; }
|
||||
|
||||
int GetBodyStyleCount() const override
|
||||
{
|
||||
if( m_demorgan )
|
||||
return 2;
|
||||
else
|
||||
return std::max( 1, (int) m_bodyStyleNames.size() );
|
||||
}
|
||||
|
||||
bool HasDeMorganBodyStyles() const override { return m_demorgan; }
|
||||
void SetHasDeMorganBodyStyles( bool aFlag ) { m_demorgan = aFlag; }
|
||||
|
||||
const std::vector<wxString>& GetBodyStyleNames() const { return m_bodyStyleNames; }
|
||||
void SetBodyStyleNames( const std::vector<wxString>& aBodyStyleNames ) { m_bodyStyleNames = aBodyStyleNames; }
|
||||
|
||||
/**
|
||||
* Set or clear the alternate body style (DeMorgan) for the symbol.
|
||||
*
|
||||
@ -604,7 +607,7 @@ public:
|
||||
* @param aHasAlternate - Set or clear the symbol alternate body style.
|
||||
* @param aDuplicatePins - Duplicate all pins from original body style if true.
|
||||
*/
|
||||
void SetHasAlternateBodyStyle( bool aHasAlternate, bool aDuplicatePins = true );
|
||||
void SetBodyStyleCount( int aCount, bool aDuplicateDrawItems, bool aDuplicatePins );
|
||||
|
||||
/**
|
||||
* Comparison test that can be used for operators.
|
||||
@ -682,18 +685,22 @@ private:
|
||||
timestamp_t m_lastModDate;
|
||||
|
||||
int m_unitCount; ///< Number of units (parts) per package.
|
||||
bool m_unitsLocked; ///< True if symbol has multiple units and changing one
|
||||
///< unit does not automatically change another unit.
|
||||
bool m_unitsLocked; ///< True if symbol has multiple units and changing one unit
|
||||
///< does not automatically change another unit.
|
||||
|
||||
LIBRENTRYOPTIONS m_options; ///< Special symbol features such as POWER or NORMAL.)
|
||||
bool m_demorgan; ///< True if there are two body styles: normal and De Morgan
|
||||
///< If false, the body style count is taken from m_bodyStyleNames
|
||||
///< size
|
||||
|
||||
LIBRENTRYOPTIONS m_options; ///< Special symbol features such as POWER or NORMAL.
|
||||
|
||||
LIB_ITEMS_CONTAINER m_drawings;
|
||||
|
||||
SYMBOL_LIB* m_library;
|
||||
wxString m_name;
|
||||
wxString m_keyWords; ///< Search keywords
|
||||
wxArrayString m_fpFilters; ///< List of suitable footprint names for the
|
||||
///< symbol (wild card names accepted).
|
||||
wxArrayString m_fpFilters; ///< List of suitable footprint names for the symbol (wild card
|
||||
///< names accepted).
|
||||
|
||||
/// A list of jumper pin groups, each of which is a set of pin numbers that should be jumpered
|
||||
/// together (treated as internally connected for the purposes of connectivity)
|
||||
@ -704,6 +711,7 @@ private:
|
||||
bool m_duplicatePinNumbersAreJumpers;
|
||||
|
||||
std::map<int, wxString> m_unitDisplayNames;
|
||||
std::vector<wxString> m_bodyStyleNames;
|
||||
};
|
||||
|
||||
#endif // CLASS_LIBENTRY_H
|
||||
|
@ -185,36 +185,25 @@ void SCH_EDIT_FRAME::SelectUnit( SCH_SYMBOL* aSymbol, int aUnit )
|
||||
}
|
||||
|
||||
|
||||
void SCH_EDIT_FRAME::FlipBodyStyle( SCH_SYMBOL* aSymbol )
|
||||
void SCH_EDIT_FRAME::SelectBodyStyle( SCH_SYMBOL* aSymbol, int aBodyStyle )
|
||||
{
|
||||
if( !aSymbol || !aSymbol->GetLibSymbolRef() )
|
||||
return;
|
||||
|
||||
SCH_COMMIT commit( m_toolManager );
|
||||
wxString msg;
|
||||
const int bodyStyleCount = aSymbol->GetLibSymbolRef()->GetBodyStyleCount();
|
||||
const int currentBodyStyle = aSymbol->GetBodyStyle();
|
||||
|
||||
if( !aSymbol->GetLibSymbolRef()->HasAlternateBodyStyle() )
|
||||
{
|
||||
LIB_ID id = aSymbol->GetLibSymbolRef()->GetLibId();
|
||||
|
||||
msg.Printf( _( "No alternate body style found for symbol '%s' in library '%s'." ),
|
||||
id.GetLibItemName().wx_str(),
|
||||
id.GetLibNickname().wx_str() );
|
||||
DisplayError( this, msg );
|
||||
if( bodyStyleCount <= 1 || currentBodyStyle == aBodyStyle )
|
||||
return;
|
||||
}
|
||||
|
||||
if( aBodyStyle > bodyStyleCount )
|
||||
aBodyStyle = bodyStyleCount;
|
||||
|
||||
SCH_COMMIT commit( m_toolManager );
|
||||
|
||||
commit.Modify( aSymbol, GetScreen() );
|
||||
|
||||
aSymbol->SetBodyStyle( aSymbol->GetBodyStyle() + 1 );
|
||||
|
||||
// ensure m_bodyStyle = 1 or 2
|
||||
// 1 = shape 1 = first (base DeMorgan) alternate body style
|
||||
// 2 = shape 2 = second (DeMorgan conversion) alternate body style
|
||||
// > 2 is not currently supported
|
||||
// When m_bodyStyle = val max, return to the first shape
|
||||
if( aSymbol->GetBodyStyle() > BODY_STYLE::DEMORGAN )
|
||||
aSymbol->SetBodyStyle( BODY_STYLE::BASE );
|
||||
aSymbol->SetBodyStyle( aBodyStyle );
|
||||
|
||||
// If selected make sure all the now-included pins are selected
|
||||
if( aSymbol->IsSelected() )
|
||||
|
@ -114,22 +114,13 @@ static wxFileName GetRescueLibraryFileName( SCHEMATIC* aSchematic )
|
||||
}
|
||||
|
||||
|
||||
RESCUE_CASE_CANDIDATE::RESCUE_CASE_CANDIDATE( const wxString& aRequestedName,
|
||||
const wxString& aNewName,
|
||||
LIB_SYMBOL* aLibCandidate,
|
||||
int aUnit,
|
||||
int aConvert )
|
||||
{
|
||||
m_requested_name = aRequestedName;
|
||||
m_new_name = aNewName;
|
||||
m_lib_candidate = aLibCandidate;
|
||||
m_unit = aUnit;
|
||||
m_convert = aConvert;
|
||||
}
|
||||
RESCUE_CASE_CANDIDATE::RESCUE_CASE_CANDIDATE( const wxString& aRequestedName, const wxString& aNewName,
|
||||
LIB_SYMBOL* aLibCandidate, int aUnit, int aBodyStyle ) :
|
||||
RESCUE_CANDIDATE( aRequestedName, aNewName, aLibCandidate, aUnit, aBodyStyle )
|
||||
{}
|
||||
|
||||
|
||||
void RESCUE_CASE_CANDIDATE::FindRescues( RESCUER& aRescuer,
|
||||
boost::ptr_vector<RESCUE_CANDIDATE>& aCandidates )
|
||||
void RESCUE_CASE_CANDIDATE::FindRescues( RESCUER& aRescuer, boost::ptr_vector<RESCUE_CANDIDATE>& aCandidates )
|
||||
{
|
||||
std::map<wxString, RESCUE_CASE_CANDIDATE> candidate_map;
|
||||
|
||||
@ -214,31 +205,7 @@ bool RESCUE_CASE_CANDIDATE::PerformAction( RESCUER* aRescuer )
|
||||
}
|
||||
|
||||
|
||||
RESCUE_CACHE_CANDIDATE::RESCUE_CACHE_CANDIDATE( const wxString& aRequestedName,
|
||||
const wxString& aNewName,
|
||||
LIB_SYMBOL* aCacheCandidate,
|
||||
LIB_SYMBOL* aLibCandidate,
|
||||
int aUnit,
|
||||
int aConvert )
|
||||
{
|
||||
m_requested_name = aRequestedName;
|
||||
m_new_name = aNewName;
|
||||
m_cache_candidate = aCacheCandidate;
|
||||
m_lib_candidate = aLibCandidate;
|
||||
m_unit = aUnit;
|
||||
m_convert = aConvert;
|
||||
}
|
||||
|
||||
|
||||
RESCUE_CACHE_CANDIDATE::RESCUE_CACHE_CANDIDATE()
|
||||
{
|
||||
m_cache_candidate = nullptr;
|
||||
m_lib_candidate = nullptr;
|
||||
}
|
||||
|
||||
|
||||
void RESCUE_CACHE_CANDIDATE::FindRescues( RESCUER& aRescuer,
|
||||
boost::ptr_vector<RESCUE_CANDIDATE>& aCandidates )
|
||||
void RESCUE_CACHE_CANDIDATE::FindRescues( RESCUER& aRescuer, boost::ptr_vector<RESCUE_CANDIDATE>& aCandidates )
|
||||
{
|
||||
std::map<wxString, RESCUE_CACHE_CANDIDATE> candidate_map;
|
||||
|
||||
@ -258,8 +225,7 @@ void RESCUE_CACHE_CANDIDATE::FindRescues( RESCUER& aRescuer,
|
||||
// A new symbol name is found (a new group starts here).
|
||||
// Search the symbol names candidates only once for this group:
|
||||
old_symbol_name = symbol_name;
|
||||
cache_match = findSymbol( symbol_name, PROJECT_SCH::SchLibs( aRescuer.GetPrj() ),
|
||||
true );
|
||||
cache_match = findSymbol( symbol_name, PROJECT_SCH::SchLibs( aRescuer.GetPrj() ), true );
|
||||
lib_match = findSymbol( symbol_name, PROJECT_SCH::SchLibs( aRescuer.GetPrj() ), false );
|
||||
|
||||
// At some point during V5 development, the LIB_ID delimiter character ':' was
|
||||
@ -304,8 +270,7 @@ wxString RESCUE_CACHE_CANDIDATE::GetActionDescription() const
|
||||
|
||||
if( !m_cache_candidate && !m_lib_candidate )
|
||||
{
|
||||
action.Printf( _( "Cannot rescue symbol %s which is not available in any library or "
|
||||
"the cache." ),
|
||||
action.Printf( _( "Cannot rescue symbol %s which is not available in any library or the cache." ),
|
||||
m_requested_name );
|
||||
}
|
||||
else if( m_cache_candidate && !m_lib_candidate )
|
||||
@ -358,24 +323,20 @@ RESCUE_SYMBOL_LIB_TABLE_CANDIDATE::RESCUE_SYMBOL_LIB_TABLE_CANDIDATE( const LIB_
|
||||
const LIB_ID& aNewId,
|
||||
LIB_SYMBOL* aCacheCandidate,
|
||||
LIB_SYMBOL* aLibCandidate,
|
||||
int aUnit, int aConvert ) :
|
||||
RESCUE_CANDIDATE()
|
||||
{
|
||||
m_requested_id = aRequestedId;
|
||||
m_requested_name = aRequestedId.Format().wx_str();
|
||||
m_new_id = aNewId;
|
||||
m_lib_candidate = aLibCandidate;
|
||||
m_cache_candidate = aCacheCandidate;
|
||||
m_unit = aUnit;
|
||||
m_convert = aConvert;
|
||||
}
|
||||
int aUnit, int aBodyStyle ) :
|
||||
RESCUE_CANDIDATE( aRequestedId.Format().wx_str(), wxEmptyString, aLibCandidate, aUnit, aBodyStyle ),
|
||||
m_requested_id( aRequestedId ),
|
||||
m_new_id( aNewId ),
|
||||
m_cache_candidate( aCacheCandidate )
|
||||
{}
|
||||
|
||||
|
||||
RESCUE_SYMBOL_LIB_TABLE_CANDIDATE::RESCUE_SYMBOL_LIB_TABLE_CANDIDATE()
|
||||
{
|
||||
m_cache_candidate = nullptr;
|
||||
m_lib_candidate = nullptr;
|
||||
}
|
||||
RESCUE_SYMBOL_LIB_TABLE_CANDIDATE::RESCUE_SYMBOL_LIB_TABLE_CANDIDATE() :
|
||||
RESCUE_CANDIDATE( wxEmptyString, wxEmptyString, nullptr, 0, 0 ),
|
||||
m_requested_id(),
|
||||
m_new_id(),
|
||||
m_cache_candidate( nullptr )
|
||||
{}
|
||||
|
||||
|
||||
void RESCUE_SYMBOL_LIB_TABLE_CANDIDATE::FindRescues( RESCUER& aRescuer,
|
||||
@ -415,13 +376,11 @@ void RESCUE_SYMBOL_LIB_TABLE_CANDIDATE::FindRescues( RESCUER& aRescuer,
|
||||
symbolName.Printf( wxT( "%s-%s" ),
|
||||
symbol_id.GetLibNickname().wx_str(),
|
||||
symbol_id.GetLibItemName().wx_str() );
|
||||
cache_match = findSymbol( symbolName, PROJECT_SCH::SchLibs( aRescuer.GetPrj() ),
|
||||
true );
|
||||
cache_match = findSymbol( symbolName, PROJECT_SCH::SchLibs( aRescuer.GetPrj() ), true );
|
||||
}
|
||||
|
||||
// Get the library symbol from the symbol library table.
|
||||
lib_match = SchGetLibSymbol( symbol_id,
|
||||
PROJECT_SCH::SchSymbolLibTable( aRescuer.GetPrj() ) );
|
||||
lib_match = SchGetLibSymbol( symbol_id, PROJECT_SCH::SchSymbolLibTable( aRescuer.GetPrj() ) );
|
||||
|
||||
if( !cache_match && !lib_match )
|
||||
continue;
|
||||
@ -484,8 +443,7 @@ wxString RESCUE_SYMBOL_LIB_TABLE_CANDIDATE::GetActionDescription() const
|
||||
|
||||
if( !m_cache_candidate && !m_lib_candidate )
|
||||
{
|
||||
action.Printf( _( "Cannot rescue symbol %s which is not available in any library or "
|
||||
"the cache." ),
|
||||
action.Printf( _( "Cannot rescue symbol %s which is not available in any library or the cache." ),
|
||||
UnescapeString( m_requested_id.GetLibItemName().wx_str() ) );
|
||||
}
|
||||
else if( m_cache_candidate && !m_lib_candidate )
|
||||
@ -546,8 +504,7 @@ RESCUER::RESCUER( PROJECT& aProject, SCHEMATIC* aSchematic, SCH_SHEET_PATH* aCur
|
||||
}
|
||||
|
||||
|
||||
void RESCUER::LogRescue( SCH_SYMBOL* aSymbol, const wxString &aOldName,
|
||||
const wxString &aNewName )
|
||||
void RESCUER::LogRescue( SCH_SYMBOL* aSymbol, const wxString &aOldName, const wxString &aNewName )
|
||||
{
|
||||
RESCUE_LOG logitem;
|
||||
logitem.symbol = aSymbol;
|
||||
@ -711,11 +668,8 @@ bool LEGACY_RESCUER::WriteRescueLibrary( wxWindow *aParent )
|
||||
}
|
||||
catch( ... /* IO_ERROR ioe */ )
|
||||
{
|
||||
wxString msg;
|
||||
|
||||
msg.Printf( _( "Failed to create symbol library file '%s'." ),
|
||||
m_rescue_lib->GetFullFileName() );
|
||||
DisplayError( aParent, msg );
|
||||
DisplayError( aParent, wxString::Format( _( "Failed to create symbol library file '%s'." ),
|
||||
m_rescue_lib->GetFullFileName() ) );
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -723,8 +677,7 @@ bool LEGACY_RESCUER::WriteRescueLibrary( wxWindow *aParent )
|
||||
wxString libPaths;
|
||||
|
||||
wxString libName = m_rescue_lib->GetName();
|
||||
SYMBOL_LIBS* libs =
|
||||
dynamic_cast<SYMBOL_LIBS*>( m_prj->GetElem( PROJECT::ELEM::SCH_SYMBOL_LIBS ) );
|
||||
SYMBOL_LIBS* libs = dynamic_cast<SYMBOL_LIBS*>( m_prj->GetElem( PROJECT::ELEM::SCH_SYMBOL_LIBS ) );
|
||||
|
||||
if( !libs )
|
||||
{
|
||||
|
@ -63,6 +63,15 @@ enum RESCUE_TYPE
|
||||
class RESCUE_CANDIDATE
|
||||
{
|
||||
public:
|
||||
RESCUE_CANDIDATE( const wxString& aRequestedName, const wxString& aNewName,
|
||||
LIB_SYMBOL* aLibCandidate, int aUnit, int aBodyStyle ) :
|
||||
m_requested_name( aRequestedName ),
|
||||
m_new_name( aNewName ),
|
||||
m_lib_candidate( aLibCandidate ),
|
||||
m_unit( aUnit ),
|
||||
m_bodyStyle( aBodyStyle )
|
||||
{}
|
||||
|
||||
virtual ~RESCUE_CANDIDATE() {}
|
||||
|
||||
/**
|
||||
@ -88,8 +97,7 @@ public:
|
||||
virtual LIB_SYMBOL* GetLibCandidate() const { return m_lib_candidate; }
|
||||
|
||||
int GetUnit() const { return m_unit; }
|
||||
|
||||
int GetConvert() const { return m_convert; }
|
||||
int GetBodyStyle() const { return m_bodyStyle; }
|
||||
|
||||
/**
|
||||
* Get a description of the action proposed, for displaying in the UI.
|
||||
@ -108,7 +116,7 @@ protected:
|
||||
wxString m_new_name;
|
||||
LIB_SYMBOL* m_lib_candidate;
|
||||
int m_unit;
|
||||
int m_convert;
|
||||
int m_bodyStyle;
|
||||
};
|
||||
|
||||
|
||||
@ -130,12 +138,14 @@ public:
|
||||
* @param aNewName is the name we want to change it to.
|
||||
* @param aLibCandidate is the part that will give us.
|
||||
* @param aUnit is the unit of the rescued symbol.
|
||||
* @param aConvert is the body style of the rescued symbol.
|
||||
* @param aBodyStyle is the body style of the rescued symbol.
|
||||
*/
|
||||
RESCUE_CASE_CANDIDATE( const wxString& aRequestedName, const wxString& aNewName,
|
||||
LIB_SYMBOL* aLibCandidate, int aUnit = 0, int aConvert = 0 );
|
||||
LIB_SYMBOL* aLibCandidate, int aUnit = 0, int aBodyStyle = 0 );
|
||||
|
||||
RESCUE_CASE_CANDIDATE() { m_lib_candidate = nullptr; }
|
||||
RESCUE_CASE_CANDIDATE() :
|
||||
RESCUE_CANDIDATE( wxEmptyString, wxEmptyString, nullptr, 0, 0 )
|
||||
{}
|
||||
|
||||
virtual wxString GetActionDescription() const override;
|
||||
|
||||
@ -164,13 +174,19 @@ public:
|
||||
* @param aCacheCandidate is the part from the cache.
|
||||
* @param aLibCandidate is the part that would be loaded from the library.
|
||||
* @param aUnit is the unit of the rescued symbol.
|
||||
* @param aConvert is the body style of the rescued symbol.
|
||||
* @param aBodyStyle is the body style of the rescued symbol.
|
||||
*/
|
||||
RESCUE_CACHE_CANDIDATE( const wxString& aRequestedName, const wxString& aNewName,
|
||||
LIB_SYMBOL* aCacheCandidate, LIB_SYMBOL* aLibCandidate,
|
||||
int aUnit = 0, int aConvert = 0 );
|
||||
int aUnit = 0, int aBodyStyle = 0 ) :
|
||||
RESCUE_CANDIDATE( aRequestedName, aNewName, aLibCandidate, aUnit, aBodyStyle ),
|
||||
m_cache_candidate( aCacheCandidate )
|
||||
{}
|
||||
|
||||
RESCUE_CACHE_CANDIDATE();
|
||||
RESCUE_CACHE_CANDIDATE() :
|
||||
RESCUE_CANDIDATE( wxEmptyString, wxEmptyString, nullptr, 0, 0 ),
|
||||
m_cache_candidate( nullptr )
|
||||
{}
|
||||
|
||||
virtual LIB_SYMBOL* GetCacheCandidate() const override { return m_cache_candidate; }
|
||||
|
||||
@ -199,11 +215,11 @@ public:
|
||||
* @param aCacheCandidate is the part from the cache.
|
||||
* @param aLibCandidate is the part that would be loaded from the library.
|
||||
* @param aUnit is the unit of the rescued symbol.
|
||||
* @param aConvert is the body style of the rescued symbol.
|
||||
* @param aBodyStyle is the body style of the rescued symbol.
|
||||
*/
|
||||
RESCUE_SYMBOL_LIB_TABLE_CANDIDATE( const LIB_ID& aRequestedId, const LIB_ID& aNewId,
|
||||
LIB_SYMBOL* aCacheCandidate, LIB_SYMBOL* aLibCandidate,
|
||||
int aUnit = 0, int aConvert = 0 );
|
||||
int aUnit = 0, int aBodyStyle = 0 );
|
||||
|
||||
RESCUE_SYMBOL_LIB_TABLE_CANDIDATE();
|
||||
|
||||
@ -235,9 +251,7 @@ public:
|
||||
RESCUER( PROJECT& aProject, SCHEMATIC* aSchematic, SCH_SHEET_PATH* aCurrentSheet,
|
||||
EDA_DRAW_PANEL_GAL::GAL_TYPE aGalBackeEndType );
|
||||
|
||||
virtual ~RESCUER()
|
||||
{
|
||||
}
|
||||
virtual ~RESCUER() = default;
|
||||
|
||||
/**
|
||||
* Write the rescue library.
|
||||
@ -313,16 +327,16 @@ public:
|
||||
protected:
|
||||
friend class DIALOG_RESCUE_EACH;
|
||||
|
||||
std::vector<SCH_SYMBOL*> m_symbols;
|
||||
PROJECT* m_prj;
|
||||
SCHEMATIC* m_schematic;
|
||||
std::vector<SCH_SYMBOL*> m_symbols;
|
||||
PROJECT* m_prj;
|
||||
SCHEMATIC* m_schematic;
|
||||
EDA_DRAW_PANEL_GAL::GAL_TYPE m_galBackEndType;
|
||||
SCH_SHEET_PATH* m_currentSheet;
|
||||
SCH_SHEET_PATH* m_currentSheet;
|
||||
|
||||
boost::ptr_vector<RESCUE_CANDIDATE> m_all_candidates;
|
||||
std::vector<RESCUE_CANDIDATE*> m_chosen_candidates;
|
||||
std::vector<RESCUE_CANDIDATE*> m_chosen_candidates;
|
||||
|
||||
std::vector<RESCUE_LOG> m_rescue_log;
|
||||
std::vector<RESCUE_LOG> m_rescue_log;
|
||||
};
|
||||
|
||||
|
||||
@ -335,9 +349,7 @@ public:
|
||||
{
|
||||
}
|
||||
|
||||
virtual ~LEGACY_RESCUER()
|
||||
{
|
||||
}
|
||||
virtual ~LEGACY_RESCUER() = default;
|
||||
|
||||
virtual void FindCandidates() override;
|
||||
|
||||
@ -361,9 +373,7 @@ public:
|
||||
SCH_SHEET_PATH* aCurrentSheet,
|
||||
EDA_DRAW_PANEL_GAL::GAL_TYPE aGalBackeEndType );
|
||||
|
||||
virtual ~SYMBOL_LIB_TABLE_RESCUER()
|
||||
{
|
||||
}
|
||||
virtual ~SYMBOL_LIB_TABLE_RESCUER() = default;
|
||||
|
||||
virtual void FindCandidates() override;
|
||||
|
||||
@ -376,8 +386,7 @@ public:
|
||||
virtual void AddSymbol( LIB_SYMBOL* aNewSymbol ) override;
|
||||
|
||||
private:
|
||||
std::vector<std::unique_ptr<LIB_SYMBOL>> m_rescueLibSymbols;
|
||||
|
||||
std::vector<std::unique_ptr<LIB_SYMBOL>> m_rescueLibSymbols;
|
||||
std::unique_ptr<std::map<std::string, UTF8>> m_properties; ///< Library plugin properties.
|
||||
};
|
||||
|
||||
|
@ -123,13 +123,13 @@ INSPECT_RESULT SCH_COLLECTOR::Inspect( EDA_ITEM* aItem, void* aTestData )
|
||||
|
||||
|
||||
void SCH_COLLECTOR::Collect( SCH_SCREEN* aScreen, const std::vector<KICAD_T>& aFilterList,
|
||||
const VECTOR2I& aPos, int aUnit, int aConvert )
|
||||
const VECTOR2I& aPos, int aUnit, int aBodyStyle )
|
||||
{
|
||||
Empty(); // empty the collection just in case
|
||||
|
||||
SetScanTypes( aFilterList );
|
||||
m_Unit = aUnit;
|
||||
m_BodyStyle = aConvert;
|
||||
m_BodyStyle = aBodyStyle;
|
||||
|
||||
// remember where the snapshot was taken from and pass refPos to the Inspect() function.
|
||||
SetRefPos( aPos );
|
||||
@ -143,13 +143,13 @@ void SCH_COLLECTOR::Collect( SCH_SCREEN* aScreen, const std::vector<KICAD_T>& aF
|
||||
|
||||
|
||||
void SCH_COLLECTOR::Collect( LIB_ITEMS_CONTAINER& aItems, const std::vector<KICAD_T>& aFilterList,
|
||||
const VECTOR2I& aPos, int aUnit, int aConvert )
|
||||
const VECTOR2I& aPos, int aUnit, int aBodyStyle )
|
||||
{
|
||||
Empty(); // empty the collection just in case
|
||||
|
||||
SetScanTypes( aFilterList );
|
||||
m_Unit = aUnit;
|
||||
m_BodyStyle = aConvert;
|
||||
m_BodyStyle = aBodyStyle;
|
||||
|
||||
// remember where the snapshot was taken from and pass refPos to the Inspect() function.
|
||||
SetRefPos( aPos );
|
||||
|
@ -74,10 +74,10 @@ public:
|
||||
* the priority order of the resulting collection.
|
||||
* @param aPos are the coordinates to use in hit testing.
|
||||
* @param aUnit is the symbol unit filter (for symbol editor).
|
||||
* @param aConvert is the DeMorgan filter (for symbol editor)
|
||||
* @param aBodyStyle is the body style filter (for symbol editor)
|
||||
*/
|
||||
void Collect( SCH_SCREEN* aScreen, const std::vector<KICAD_T>& aScanTypes,
|
||||
const VECTOR2I& aPos, int aUnit = 0, int aConvert = 0 );
|
||||
const VECTOR2I& aPos, int aUnit = 0, int aBodyStyle = 0 );
|
||||
|
||||
/**
|
||||
* Scan an #EDA_ITEM using this class's Inspector method which does the collection.
|
||||
@ -87,10 +87,10 @@ public:
|
||||
* and the priority order of the resulting collection.
|
||||
* @param aPos are the coordinates to use in hit testing.
|
||||
* @param aUnit is the symbol unit filter (for symbol editor).
|
||||
* @param aConvert is the DeMorgan filter (for symbol editor).
|
||||
* @param aBodyStyle is the body style filter (for symbol editor).
|
||||
*/
|
||||
void Collect( LIB_ITEMS_CONTAINER& aItems, const std::vector<KICAD_T>& aScanTypes,
|
||||
const VECTOR2I& aPos, int aUnit = 0, int aConvert = 0 );
|
||||
const VECTOR2I& aPos, int aUnit = 0, int aBodyStyle = 0 );
|
||||
|
||||
/**
|
||||
* Test if the collected items form a corner of two line segments.
|
||||
@ -101,7 +101,7 @@ public:
|
||||
|
||||
public:
|
||||
int m_Unit; // Fixed symbol unit filter (for symbol editor)
|
||||
int m_BodyStyle; // Fixed DeMorgan filter (for symbol editor)
|
||||
int m_BodyStyle; // Fixed body style filter (for symbol editor)
|
||||
|
||||
bool m_ShowPinElectricalTypes;
|
||||
};
|
||||
|
@ -394,8 +394,7 @@ public:
|
||||
|
||||
void SetCurrentSheet( const SCH_SHEET_PATH& aSheet );
|
||||
|
||||
void UpdateItem( EDA_ITEM* aItem, bool isAddOrDelete = false,
|
||||
bool aUpdateRtree = false ) override;
|
||||
void UpdateItem( EDA_ITEM* aItem, bool isAddOrDelete = false, bool aUpdateRtree = false ) override;
|
||||
|
||||
/**
|
||||
* Rebuild the GAL and redraw the screen.
|
||||
@ -589,9 +588,8 @@ public:
|
||||
* new/duplicate libs.
|
||||
* @return True if the schematic was imported properly.
|
||||
*/
|
||||
bool LoadSheetFromFile( SCH_SHEET* aSheet, SCH_SHEET_PATH* aCurrentSheet,
|
||||
const wxString& aFileName, bool aSkipRecursionCheck = false,
|
||||
bool aSkipLibCheck = false );
|
||||
bool LoadSheetFromFile( SCH_SHEET* aSheet, SCH_SHEET_PATH* aCurrentSheet, const wxString& aFileName,
|
||||
bool aSkipRecursionCheck = false, bool aSkipLibCheck = false );
|
||||
|
||||
/**
|
||||
* Remove a given junction and heals any wire segments under the junction.
|
||||
@ -602,10 +600,10 @@ public:
|
||||
|
||||
void UpdateHopOveredWires( SCH_ITEM* aItem );
|
||||
|
||||
void FlipBodyStyle( SCH_SYMBOL* aSymbol );
|
||||
|
||||
void SelectUnit( SCH_SYMBOL* aSymbol, int aUnit );
|
||||
|
||||
void SelectBodyStyle( SCH_SYMBOL* aSymbol, int aBodyStyle );
|
||||
|
||||
void SetAltPinFunction( SCH_PIN* aPin, const wxString& aFunction );
|
||||
|
||||
/* Undo - redo */
|
||||
|
@ -306,7 +306,7 @@ wxString SCH_FIELD::GetFullText( int unit ) const
|
||||
wxString text = GetText();
|
||||
text << wxT( "?" );
|
||||
|
||||
if( GetParentSymbol() && GetParentSymbol()->IsMulti() )
|
||||
if( GetParentSymbol() && GetParentSymbol()->IsMultiUnit() )
|
||||
text << LIB_SYMBOL::LetterSubReference( unit, 'A' );
|
||||
|
||||
return text;
|
||||
|
@ -123,4 +123,5 @@
|
||||
//#define SEXPR_SCHEMATIC_FILE_VERSION 20250318 // ~ no longer means empty text
|
||||
//#define SEXPR_SCHEMATIC_FILE_VERSION 20250425 // uuids for tables
|
||||
//#define SEXPR_SCHEMATIC_FILE_VERSION 20250513 // Groups can have design block lib_id
|
||||
#define SEXPR_SCHEMATIC_FILE_VERSION 20250610 // DNP, etc. flags for rule areas
|
||||
//#define SEXPR_SCHEMATIC_FILE_VERSION 20250610 // DNP, etc. flags for rule areas
|
||||
#define SEXPR_SCHEMATIC_FILE_VERSION 20250827 // Custom body styles
|
||||
|
@ -1485,7 +1485,7 @@ void SCH_IO_ALTIUM::ParseComponent( int aIndex, const std::map<wxString, wxStrin
|
||||
ksymbol->SetName( name );
|
||||
ksymbol->SetDescription( elem.componentdescription );
|
||||
ksymbol->SetLibId( libId );
|
||||
ksymbol->SetUnitCount( elem.partcount - 1 );
|
||||
ksymbol->SetUnitCount( elem.partcount - 1, true );
|
||||
m_libSymbols.insert( { aIndex, ksymbol } );
|
||||
|
||||
// each component has its own symbol for now
|
||||
@ -4499,7 +4499,7 @@ std::vector<LIB_SYMBOL*> SCH_IO_ALTIUM::ParseLibComponent( const std::map<wxStri
|
||||
LIB_ID libId = AltiumToKiCadLibID( getLibName(), symbol->GetName() );
|
||||
symbol->SetDescription( elem.componentdescription );
|
||||
symbol->SetLibId( libId );
|
||||
symbol->SetUnitCount( elem.partcount - 1 );
|
||||
symbol->SetUnitCount( elem.partcount - 1, true );
|
||||
symbols.push_back( symbol );
|
||||
}
|
||||
|
||||
|
@ -302,11 +302,11 @@ void CADSTAR_SCH_ARCHIVE_LOADER::copySymbolItems( std::unique_ptr<LIB_SYMBOL>& a
|
||||
int aDestUnit, bool aOverrideFields )
|
||||
{
|
||||
// Ensure there are no items on the unit we want to load onto
|
||||
for( SCH_ITEM* item : aDestSym->GetUnitDrawItems( aDestUnit, 0 /*aConvert*/ ) )
|
||||
for( SCH_ITEM* item : aDestSym->GetUnitDrawItems( aDestUnit, 0 /* aBodyStyle */ ) )
|
||||
aDestSym->RemoveDrawItem( item );
|
||||
|
||||
// Copy all draw items
|
||||
for( SCH_ITEM* newItem : aSourceSym->GetUnitDrawItems( 1, 0 /*aConvert*/ ) )
|
||||
for( SCH_ITEM* newItem : aSourceSym->GetUnitDrawItems( 1, 0 /* aBodyStyle */ ) )
|
||||
{
|
||||
SCH_ITEM* itemCopy = static_cast<SCH_ITEM*>( newItem->Clone() );
|
||||
itemCopy->SetParent( aDestSym.get() );
|
||||
@ -664,7 +664,7 @@ void CADSTAR_SCH_ARCHIVE_LOADER::loadPartsLibrary()
|
||||
wxString escapedPartName = EscapeString( part.Name, CTX_LIBID );
|
||||
LIB_SYMBOL* kiSym = new LIB_SYMBOL( escapedPartName );
|
||||
|
||||
kiSym->SetUnitCount( part.Definition.GateSymbols.size() );
|
||||
kiSym->SetUnitCount( part.Definition.GateSymbols.size(), true );
|
||||
bool ok = true;
|
||||
|
||||
for( std::pair<GATE_ID, PART::DEFINITION::GATE> gatePair : part.Definition.GateSymbols )
|
||||
|
@ -2038,7 +2038,7 @@ EAGLE_LIBRARY* SCH_IO_EAGLE::loadLibrary( const ELIBRARY* aLibrary, EAGLE_LIBRAR
|
||||
|
||||
// Process each gate in the deviceset for this device.
|
||||
int gate_count = static_cast<int>( edeviceset->gates.size() );
|
||||
libSymbol->SetUnitCount( gate_count );
|
||||
libSymbol->SetUnitCount( gate_count, true );
|
||||
libSymbol->LockUnits( true );
|
||||
|
||||
SCH_FIELD* reference = libSymbol->GetField( FIELD_T::REFERENCE );
|
||||
@ -2078,7 +2078,7 @@ EAGLE_LIBRARY* SCH_IO_EAGLE::loadLibrary( const ELIBRARY* aLibrary, EAGLE_LIBRAR
|
||||
gateindex++;
|
||||
}
|
||||
|
||||
libSymbol->SetUnitCount( gate_count );
|
||||
libSymbol->SetUnitCount( gate_count, true );
|
||||
|
||||
if( gate_count == 1 && ispower )
|
||||
libSymbol->SetGlobalPower();
|
||||
|
@ -194,10 +194,7 @@ void SCH_IO_KICAD_LEGACY_LIB_CACHE::loadDocs()
|
||||
THROW_IO_ERROR( _( "symbol document library file is empty" ) );
|
||||
|
||||
if( !strCompare( DOCFILE_IDENT, line, &line ) )
|
||||
{
|
||||
SCH_PARSE_ERROR( "invalid document library file version formatting in header",
|
||||
reader, line );
|
||||
}
|
||||
SCH_PARSE_ERROR( "invalid document library file version formatting in header", reader, line );
|
||||
|
||||
while( reader.ReadLine() )
|
||||
{
|
||||
@ -352,8 +349,10 @@ LIB_SYMBOL* SCH_IO_KICAD_LEGACY_LIB_CACHE::LoadPart( LINE_READER& aReader, int a
|
||||
tmp = tokens.GetNextToken(); // Show pin numbers.
|
||||
|
||||
if( !( tmp == "Y" || tmp == "N") )
|
||||
{
|
||||
THROW_PARSE_ERROR( "expected Y or N", aReader.GetSource(), aReader.Line(),
|
||||
aReader.LineNumber(), pos );
|
||||
}
|
||||
|
||||
pos += tmp.size() + 1;
|
||||
symbol->SetShowPinNumbers( ( tmp == "N" ) ? false : true );
|
||||
@ -372,17 +371,14 @@ LIB_SYMBOL* SCH_IO_KICAD_LEGACY_LIB_CACHE::LoadPart( LINE_READER& aReader, int a
|
||||
tmp = tokens.GetNextToken(); // Number of units.
|
||||
|
||||
if( !tmp.ToLong( &num ) )
|
||||
{
|
||||
THROW_PARSE_ERROR( "invalid unit count", aReader.GetSource(), aReader.Line(),
|
||||
aReader.LineNumber(), pos );
|
||||
}
|
||||
THROW_PARSE_ERROR( "invalid unit count", aReader.GetSource(), aReader.Line(), aReader.LineNumber(), pos );
|
||||
|
||||
pos += tmp.size() + 1;
|
||||
symbol->SetUnitCount( (int)num );
|
||||
symbol->SetUnitCount( (int)num, true );
|
||||
|
||||
// Ensure m_unitCount is >= 1. Could be read as 0 in old libraries.
|
||||
if( symbol->GetUnitCount() < 1 )
|
||||
symbol->SetUnitCount( 1 );
|
||||
symbol->SetUnitCount( 1, true );
|
||||
|
||||
// Copy symbol name and prefix.
|
||||
|
||||
@ -474,6 +470,7 @@ LIB_SYMBOL* SCH_IO_KICAD_LEGACY_LIB_CACHE::LoadPart( LINE_READER& aReader, int a
|
||||
loadFootprintFilters( symbol, aReader );
|
||||
else if( strCompare( "ENDDEF", line, &line ) ) // End of symbol description
|
||||
{
|
||||
symbol->SetHasDeMorganBodyStyles( symbol->HasLegacyAlternateBodyStyle() );
|
||||
return symbol.release();
|
||||
}
|
||||
|
||||
@ -520,6 +517,7 @@ void SCH_IO_KICAD_LEGACY_LIB_CACHE::loadAliases( std::unique_ptr<LIB_SYMBOL>& aS
|
||||
}
|
||||
|
||||
newSymbol->SetParent( aSymbol.get() );
|
||||
newSymbol->SetHasDeMorganBodyStyles( newSymbol->HasLegacyAlternateBodyStyle() );
|
||||
|
||||
// This will prevent duplicate aliases.
|
||||
(*aMap)[ newSymbol->GetName() ] = newSymbol;
|
||||
@ -1224,12 +1222,12 @@ SCH_PIN* SCH_IO_KICAD_LEGACY_LIB_CACHE::loadPin( std::unique_ptr<LIB_SYMBOL>& aS
|
||||
|
||||
if( !tmp.ToLong( &num ) )
|
||||
{
|
||||
THROW_PARSE_ERROR( "invalid pin alternate body type", aReader.GetSource(), aReader.Line(),
|
||||
THROW_PARSE_ERROR( "invalid pin body style", aReader.GetSource(), aReader.Line(),
|
||||
aReader.LineNumber(), pos );
|
||||
}
|
||||
|
||||
pos += tmp.size() + 1;
|
||||
int convert = (int) num;
|
||||
int bodyStyle = (int) num;
|
||||
|
||||
tmp = tokens.GetNextToken();
|
||||
|
||||
@ -1269,7 +1267,7 @@ SCH_PIN* SCH_IO_KICAD_LEGACY_LIB_CACHE::loadPin( std::unique_ptr<LIB_SYMBOL>& aS
|
||||
length,
|
||||
nameTextSize,
|
||||
numberTextSize,
|
||||
convert,
|
||||
bodyStyle,
|
||||
position,
|
||||
unit );
|
||||
|
||||
@ -1320,8 +1318,7 @@ SCH_PIN* SCH_IO_KICAD_LEGACY_LIB_CACHE::loadPin( std::unique_ptr<LIB_SYMBOL>& aS
|
||||
case LOWLEVEL_OUT: pin->SetShape( GRAPHIC_PINSHAPE::OUTPUT_LOW ); break;
|
||||
case FALLING_EDGE: pin->SetShape( GRAPHIC_PINSHAPE::FALLING_EDGE_CLOCK ); break;
|
||||
case NONLOGIC: pin->SetShape( GRAPHIC_PINSHAPE::NONLOGIC ); break;
|
||||
default:
|
||||
SCH_PARSE_ERROR( "pin attributes do not define a valid pin shape", aReader, line );
|
||||
default: SCH_PARSE_ERROR( "pin attributes do not define a valid pin shape", aReader, line );
|
||||
}
|
||||
}
|
||||
|
||||
@ -1341,8 +1338,7 @@ SCH_SHAPE* SCH_IO_KICAD_LEGACY_LIB_CACHE::loadPolyLine( LINE_READER& aReader )
|
||||
polyLine->SetUnit( parseInt( aReader, line, &line ) );
|
||||
polyLine->SetBodyStyle( parseInt( aReader, line, &line ) );
|
||||
|
||||
STROKE_PARAMS stroke( schIUScale.MilsToIU( parseInt( aReader, line, &line ) ),
|
||||
LINE_STYLE::SOLID );
|
||||
STROKE_PARAMS stroke( schIUScale.MilsToIU( parseInt( aReader, line, &line ) ), LINE_STYLE::SOLID );
|
||||
|
||||
polyLine->SetStroke( stroke );
|
||||
|
||||
@ -1377,8 +1373,7 @@ SCH_SHAPE* SCH_IO_KICAD_LEGACY_LIB_CACHE::loadBezier( LINE_READER& aReader )
|
||||
bezier->SetUnit( parseInt( aReader, line, &line ) );
|
||||
bezier->SetBodyStyle( parseInt( aReader, line, &line ) );
|
||||
|
||||
STROKE_PARAMS stroke ( schIUScale.MilsToIU( parseInt( aReader, line, &line ) ),
|
||||
LINE_STYLE::SOLID );
|
||||
STROKE_PARAMS stroke ( schIUScale.MilsToIU( parseInt( aReader, line, &line ) ), LINE_STYLE::SOLID );
|
||||
|
||||
bezier->SetStroke( stroke );
|
||||
|
||||
|
@ -733,9 +733,7 @@ void SCH_IO_KICAD_SEXPR::saveSymbol( SCH_SYMBOL* aSymbol, const SCHEMATIC& aSche
|
||||
}
|
||||
|
||||
m_out->Print( "(unit %d)", unit );
|
||||
|
||||
if( aSymbol->GetBodyStyle() == BODY_STYLE::DEMORGAN )
|
||||
m_out->Print( "(convert %d)", aSymbol->GetBodyStyle() );
|
||||
m_out->Print( "(body_style %d)", aSymbol->GetBodyStyle() );
|
||||
|
||||
KICAD_FORMAT::FormatBool( m_out, "exclude_from_sim", aSymbol->GetExcludedFromSim() );
|
||||
KICAD_FORMAT::FormatBool( m_out, "in_bom", !aSymbol->GetExcludedFromBOM() );
|
||||
|
@ -168,6 +168,23 @@ void SCH_IO_KICAD_SEXPR_LIB_CACHE::SaveSymbol( LIB_SYMBOL* aSymbol, OUTPUTFORMAT
|
||||
|
||||
// TODO: add anchor position token here.
|
||||
|
||||
if( aSymbol->IsMultiBodyStyle() )
|
||||
{
|
||||
aFormatter.Print( "(body_styles " );
|
||||
|
||||
if( aSymbol->HasDeMorganBodyStyles() )
|
||||
{
|
||||
aFormatter.Print( "demorgan" );
|
||||
}
|
||||
else
|
||||
{
|
||||
for( const wxString& bodyStyle : aSymbol->GetBodyStyleNames() )
|
||||
aFormatter.Print( "%s ", aFormatter.Quotew( bodyStyle ).c_str() );
|
||||
}
|
||||
|
||||
aFormatter.Print( ")" );
|
||||
}
|
||||
|
||||
if( !aSymbol->GetShowPinNumbers() )
|
||||
aFormatter.Print( "(pin_numbers (hide yes))" );
|
||||
|
||||
@ -258,9 +275,9 @@ void SCH_IO_KICAD_SEXPR_LIB_CACHE::SaveSymbol( LIB_SYMBOL* aSymbol, OUTPUTFORMAT
|
||||
unit.m_bodyStyle );
|
||||
|
||||
// if the unit has a display name, write that
|
||||
if( aSymbol->HasUnitDisplayName( unit.m_unit ) )
|
||||
if( aSymbol->GetUnitDisplayNames().contains( unit.m_unit ) )
|
||||
{
|
||||
name = aSymbol->GetUnitDisplayName( unit.m_unit, false );
|
||||
name = aSymbol->GetUnitDisplayNames().at( unit.m_unit );
|
||||
aFormatter.Print( "(unit_name %s)", aFormatter.Quotes( name ).c_str() );
|
||||
}
|
||||
|
||||
|
@ -309,19 +309,15 @@ LIB_SYMBOL* SCH_IO_KICAD_SEXPR_PARSER::parseLibSymbol( LIB_SYMBOL_MAP& aSymbolLi
|
||||
long tmp;
|
||||
wxString name;
|
||||
wxString error;
|
||||
wxString unitDisplayName;
|
||||
SCH_ITEM* item;
|
||||
std::unique_ptr<LIB_SYMBOL> symbol = std::make_unique<LIB_SYMBOL>( wxEmptyString );
|
||||
|
||||
symbol->SetUnitCount( 1 );
|
||||
symbol->SetUnitCount( 1, true );
|
||||
|
||||
token = NextTok();
|
||||
|
||||
if( !IsSymbol( token ) )
|
||||
{
|
||||
THROW_PARSE_ERROR( _( "Invalid symbol name" ), CurSource(), CurLine(), CurLineNumber(),
|
||||
CurOffset() );
|
||||
}
|
||||
THROW_PARSE_ERROR( _( "Invalid symbol name" ), CurSource(), CurLine(), CurLineNumber(), CurOffset() );
|
||||
|
||||
name = FromUTF8();
|
||||
|
||||
@ -377,6 +373,10 @@ LIB_SYMBOL* SCH_IO_KICAD_SEXPR_PARSER::parseLibSymbol( LIB_SYMBOL_MAP& aSymbolLi
|
||||
NeedRIGHT();
|
||||
break;
|
||||
|
||||
case T_body_styles:
|
||||
parseBodyStyles( symbol );
|
||||
break;
|
||||
|
||||
case T_pin_names:
|
||||
parsePinNames( symbol );
|
||||
break;
|
||||
@ -512,14 +512,14 @@ LIB_SYMBOL* SCH_IO_KICAD_SEXPR_PARSER::parseLibSymbol( LIB_SYMBOL_MAP& aSymbolLi
|
||||
|
||||
if( !tokenizer.GetNextToken().ToLong( &tmp ) )
|
||||
{
|
||||
error.Printf( _( "Invalid symbol convert number %s" ), name.c_str() );
|
||||
error.Printf( _( "Invalid symbol body style number %s" ), name.c_str() );
|
||||
THROW_PARSE_ERROR( error, CurSource(), CurLine(), CurLineNumber(), CurOffset() );
|
||||
}
|
||||
|
||||
m_bodyStyle = static_cast<int>( tmp );
|
||||
|
||||
if( m_bodyStyle > 1 )
|
||||
symbol->SetHasAlternateBodyStyle( true, false );
|
||||
symbol->SetBodyStyleCount( m_bodyStyle, false, false );
|
||||
|
||||
if( m_unit > symbol->GetUnitCount() )
|
||||
symbol->SetUnitCount( m_unit, false );
|
||||
@ -537,10 +537,7 @@ LIB_SYMBOL* SCH_IO_KICAD_SEXPR_PARSER::parseLibSymbol( LIB_SYMBOL_MAP& aSymbolLi
|
||||
token = NextTok();
|
||||
|
||||
if( IsSymbol( token ) )
|
||||
{
|
||||
unitDisplayName = FromUTF8();
|
||||
symbol->SetUnitDisplayName( m_unit, unitDisplayName );
|
||||
}
|
||||
symbol->GetUnitDisplayNames()[m_unit] = FromUTF8();
|
||||
|
||||
NeedRIGHT();
|
||||
break;
|
||||
@ -621,8 +618,7 @@ LIB_SYMBOL* SCH_IO_KICAD_SEXPR_PARSER::parseLibSymbol( LIB_SYMBOL_MAP& aSymbolLi
|
||||
symbol->GetDrawItems().sort();
|
||||
m_symbolName.clear();
|
||||
|
||||
const std::vector<wxString>* embeddedFonts =
|
||||
symbol->GetEmbeddedFiles()->UpdateFontFiles();
|
||||
const std::vector<wxString>* embeddedFonts = symbol->GetEmbeddedFiles()->UpdateFontFiles();
|
||||
|
||||
symbol->RunOnChildren(
|
||||
[&]( SCH_ITEM* aChild )
|
||||
@ -632,6 +628,11 @@ LIB_SYMBOL* SCH_IO_KICAD_SEXPR_PARSER::parseLibSymbol( LIB_SYMBOL_MAP& aSymbolLi
|
||||
},
|
||||
RECURSE_MODE::NO_RECURSE );
|
||||
|
||||
// Before V10 we didn't store the number of body styles in a symbol, we just looked at all its
|
||||
// drawings each time we wanted to know.
|
||||
if( m_requiredVersion < 20250827 )
|
||||
symbol->SetHasDeMorganBodyStyles( symbol->HasLegacyAlternateBodyStyle() );
|
||||
|
||||
return symbol.release();
|
||||
}
|
||||
|
||||
@ -906,6 +907,34 @@ void SCH_IO_KICAD_SEXPR_PARSER::parseHeader( TSCHEMATIC_T::T aHeaderType, int aF
|
||||
}
|
||||
|
||||
|
||||
void SCH_IO_KICAD_SEXPR_PARSER::parseBodyStyles( std::unique_ptr<LIB_SYMBOL>& aSymbol )
|
||||
{
|
||||
wxCHECK_RET( CurTok() == T_body_styles,
|
||||
"Cannot parse " + GetTokenString( CurTok() ) + " as a body_styles token." );
|
||||
|
||||
std::vector<wxString> names;
|
||||
|
||||
for( T token = NextTok(); token != T_RIGHT; token = NextTok() )
|
||||
{
|
||||
if( token == T_demorgan )
|
||||
{
|
||||
aSymbol->SetHasDeMorganBodyStyles( true );
|
||||
continue;
|
||||
}
|
||||
else if( !IsSymbol( token ) )
|
||||
{
|
||||
THROW_PARSE_ERROR( _( "Invalid property value" ), CurSource(), CurLine(), CurLineNumber(),
|
||||
CurOffset() );
|
||||
}
|
||||
|
||||
names.push_back( FromUTF8() );
|
||||
}
|
||||
|
||||
if( !names.empty() )
|
||||
aSymbol->SetBodyStyleNames( names );
|
||||
}
|
||||
|
||||
|
||||
void SCH_IO_KICAD_SEXPR_PARSER::parsePinNames( std::unique_ptr<LIB_SYMBOL>& aSymbol )
|
||||
{
|
||||
wxCHECK_RET( CurTok() == T_pin_names,
|
||||
@ -3146,10 +3175,9 @@ SCH_SYMBOL* SCH_IO_KICAD_SEXPR_PARSER::parseSchematicSymbol()
|
||||
NeedRIGHT();
|
||||
break;
|
||||
|
||||
case T_convert:
|
||||
// Use SetBodyStyleUnconditional() because the full symbol properties
|
||||
// (including the corresponding LIB_SYMBOL) are not known
|
||||
symbol->SetBodyStyleUnconditional( parseInt( "symbol body style" ) );
|
||||
case T_convert: // Legacy token
|
||||
case T_body_style:
|
||||
symbol->SetBodyStyle( parseInt( "symbol body style" ) );
|
||||
NeedRIGHT();
|
||||
break;
|
||||
|
||||
|
@ -203,8 +203,8 @@ private:
|
||||
aBottom = parseInternalUnits( "bottom margin" );
|
||||
}
|
||||
|
||||
void parseEDA_TEXT( EDA_TEXT* aText, bool aConvertOverbarSyntax,
|
||||
bool aEnforceMinTextSize = true );
|
||||
void parseEDA_TEXT( EDA_TEXT* aText, bool aConvertOverbarSyntax, bool aEnforceMinTextSize = true );
|
||||
void parseBodyStyles( std::unique_ptr<LIB_SYMBOL>& aSymbol );
|
||||
void parsePinNames( std::unique_ptr<LIB_SYMBOL>& aSymbol );
|
||||
void parsePinNumbers( std::unique_ptr<LIB_SYMBOL>& aSymbol );
|
||||
|
||||
|
@ -669,10 +669,10 @@ void SCH_ITEM::GetMsgPanelInfo( EDA_DRAW_FRAME* aFrame, std::vector<MSG_PANEL_IT
|
||||
|
||||
if( SYMBOL* symbol = GetParentSymbol() )
|
||||
{
|
||||
if( symbol->GetUnitCount() )
|
||||
if( symbol->IsMultiUnit() )
|
||||
aList.emplace_back( _( "Unit" ), GetUnitDisplayName( GetUnit(), false ) );
|
||||
|
||||
if( symbol->HasAlternateBodyStyle() )
|
||||
if( symbol->IsMultiBodyStyle() )
|
||||
aList.emplace_back( _( "Body Style" ), GetBodyStyleDescription( GetBodyStyle(), true ) );
|
||||
|
||||
if( dynamic_cast<LIB_SYMBOL*>( symbol ) && IsPrivate() )
|
||||
@ -716,7 +716,7 @@ static struct SCH_ITEM_DESC
|
||||
if( SCH_ITEM* schItem = dynamic_cast<SCH_ITEM*>( aItem ) )
|
||||
{
|
||||
if( const SYMBOL* symbol = schItem->GetParentSymbol() )
|
||||
return symbol->IsMulti();
|
||||
return symbol->IsMultiUnit();
|
||||
}
|
||||
|
||||
return false;
|
||||
@ -728,7 +728,7 @@ static struct SCH_ITEM_DESC
|
||||
if( SCH_ITEM* schItem = dynamic_cast<SCH_ITEM*>( aItem ) )
|
||||
{
|
||||
if( const SYMBOL* symbol = schItem->GetParentSymbol() )
|
||||
return symbol->HasAlternateBodyStyle();
|
||||
return symbol->IsMultiBodyStyle();
|
||||
}
|
||||
|
||||
return false;
|
||||
|
@ -454,25 +454,11 @@ void SCH_SYMBOL::UpdatePins()
|
||||
}
|
||||
|
||||
|
||||
void SCH_SYMBOL::SetBodyStyleUnconditional( int aBodyStyle )
|
||||
{
|
||||
if( m_bodyStyle != aBodyStyle )
|
||||
{
|
||||
m_bodyStyle = ( m_bodyStyle == BODY_STYLE::BASE ) ? BODY_STYLE::DEMORGAN
|
||||
: BODY_STYLE::BASE;
|
||||
|
||||
// The body style may have a different pin layout so the update the pin map.
|
||||
UpdatePins();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void SCH_SYMBOL::SetBodyStyle( int aBodyStyle )
|
||||
{
|
||||
if( HasAlternateBodyStyle() && m_bodyStyle != aBodyStyle )
|
||||
if( aBodyStyle != m_bodyStyle )
|
||||
{
|
||||
m_bodyStyle = ( m_bodyStyle == BODY_STYLE::BASE ) ? BODY_STYLE::DEMORGAN
|
||||
: BODY_STYLE::BASE;
|
||||
m_bodyStyle = aBodyStyle;
|
||||
|
||||
// The body style may have a different pin layout so the update the pin map.
|
||||
UpdatePins();
|
||||
@ -480,15 +466,6 @@ void SCH_SYMBOL::SetBodyStyle( int aBodyStyle )
|
||||
}
|
||||
|
||||
|
||||
bool SCH_SYMBOL::HasAlternateBodyStyle() const
|
||||
{
|
||||
if( m_part )
|
||||
return m_part->HasAlternateBodyStyle();
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
int SCH_SYMBOL::GetUnitCount() const
|
||||
{
|
||||
if( m_part )
|
||||
@ -498,6 +475,24 @@ int SCH_SYMBOL::GetUnitCount() const
|
||||
}
|
||||
|
||||
|
||||
int SCH_SYMBOL::GetBodyStyleCount() const
|
||||
{
|
||||
if( m_part )
|
||||
return m_part->GetBodyStyleCount();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
bool SCH_SYMBOL::HasDeMorganBodyStyles() const
|
||||
{
|
||||
if( m_part )
|
||||
return m_part->HasDeMorganBodyStyles();
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
wxString SCH_SYMBOL::GetUnitDisplayName( int aUnit, bool aLabel ) const
|
||||
{
|
||||
if( m_part )
|
||||
@ -513,10 +508,6 @@ wxString SCH_SYMBOL::GetBodyStyleDescription( int aBodyStyle, bool aLabel ) cons
|
||||
{
|
||||
if( m_part )
|
||||
return m_part->GetBodyStyleDescription( aBodyStyle, aLabel );
|
||||
else if( aBodyStyle == BODY_STYLE::DEMORGAN )
|
||||
return aLabel ? _( "Alternate" ) : wxString( _HKI( "Alternate" ) );
|
||||
else if( aBodyStyle == BODY_STYLE::BASE )
|
||||
return aLabel ? _( "Standard" ) : wxString( _HKI( "Standard" ) );
|
||||
else
|
||||
return wxT( "?" );
|
||||
}
|
||||
@ -2972,7 +2963,7 @@ static struct SCH_SYMBOL_DESC
|
||||
[=]( INSPECTABLE* aItem ) -> bool
|
||||
{
|
||||
if( SCH_SYMBOL* symbol = dynamic_cast<SCH_SYMBOL*>( aItem ) )
|
||||
return symbol->IsMulti();
|
||||
return symbol->IsMultiUnit();
|
||||
|
||||
return false;
|
||||
};
|
||||
@ -2981,7 +2972,7 @@ static struct SCH_SYMBOL_DESC
|
||||
[=]( INSPECTABLE* aItem ) -> bool
|
||||
{
|
||||
if( SCH_SYMBOL* symbol = dynamic_cast<SCH_SYMBOL*>( aItem ) )
|
||||
return symbol->HasAlternateBodyStyle();
|
||||
return symbol->IsMultiBodyStyle();
|
||||
|
||||
return false;
|
||||
};
|
||||
@ -3011,7 +3002,7 @@ static struct SCH_SYMBOL_DESC
|
||||
|
||||
if( SCH_SYMBOL* symbol = dynamic_cast<SCH_SYMBOL*>( aItem ) )
|
||||
{
|
||||
for( int ii : { BODY_STYLE::BASE, BODY_STYLE::DEMORGAN } )
|
||||
for( int ii = 1; ii <= symbol->GetBodyStyleCount(); ii++ )
|
||||
choices.Add( symbol->GetBodyStyleDescription( ii, false ) );
|
||||
}
|
||||
|
||||
|
@ -232,15 +232,6 @@ public:
|
||||
|
||||
void SetBodyStyle( int aBodyStyle ) override;
|
||||
|
||||
/**
|
||||
* Similar to SetBodyStyle(), but always set the body style, regardless
|
||||
* the lib symbol properties (the LIB_SYMBOL m_part can be not set during
|
||||
* schematic files loading)
|
||||
*/
|
||||
void SetBodyStyleUnconditional( int aBodyStyle );
|
||||
|
||||
bool HasAlternateBodyStyle() const override;
|
||||
|
||||
wxString GetPrefix() const { return m_prefix; }
|
||||
void SetPrefix( const wxString& aPrefix ) { m_prefix = aPrefix; }
|
||||
|
||||
@ -258,7 +249,18 @@ public:
|
||||
*/
|
||||
int GetUnitCount() const override;
|
||||
|
||||
bool IsMulti() const override { return GetUnitCount() > 1; }
|
||||
bool IsMultiUnit() const override { return GetUnitCount() > 1; }
|
||||
|
||||
/**
|
||||
* Return the number of body styles of the symbol.
|
||||
*
|
||||
* @return the number of body styles or zero if the library entry cannot be found.
|
||||
*/
|
||||
int GetBodyStyleCount() const override;
|
||||
|
||||
bool IsMultiBodyStyle() const override { return GetBodyStyleCount() > 1; }
|
||||
|
||||
bool HasDeMorganBodyStyles() const override;
|
||||
|
||||
/**
|
||||
* Compute the new transform matrix based on \a aOrientation for the symbol which is
|
||||
@ -522,7 +524,7 @@ public:
|
||||
|
||||
void SetBodyStyleProp( const wxString& aBodyStyle ) override
|
||||
{
|
||||
for( int bodyStyle : { BODY_STYLE::BASE, BODY_STYLE::DEMORGAN } )
|
||||
for( int bodyStyle = 1; bodyStyle <= GetBodyStyleCount(); bodyStyle++ )
|
||||
{
|
||||
if( GetBodyStyleDescription( bodyStyle, false ) == aBodyStyle )
|
||||
{
|
||||
|
@ -8,6 +8,8 @@ background
|
||||
bezier
|
||||
bidirectional
|
||||
bitmap
|
||||
body_style
|
||||
body_styles
|
||||
bold
|
||||
border
|
||||
bottom
|
||||
@ -32,6 +34,7 @@ data
|
||||
date
|
||||
default
|
||||
default_instance
|
||||
demorgan
|
||||
diameter
|
||||
diamond
|
||||
directive_label
|
||||
|
@ -115,23 +115,28 @@ public:
|
||||
virtual bool IsPower() const = 0;
|
||||
virtual bool IsNormal() const = 0;
|
||||
|
||||
/**
|
||||
* Test if symbol has more than one body conversion type (DeMorgan).
|
||||
*
|
||||
* @return True if symbol has more than one conversion.
|
||||
*/
|
||||
virtual bool HasAlternateBodyStyle() const = 0;
|
||||
|
||||
/**
|
||||
* @return true if the symbol has multiple units per symbol.
|
||||
*/
|
||||
virtual bool IsMulti() const = 0;
|
||||
virtual bool IsMultiUnit() const = 0;
|
||||
|
||||
/**
|
||||
* @return the number of units defined for the symbol.
|
||||
*/
|
||||
virtual int GetUnitCount() const = 0;
|
||||
|
||||
/**
|
||||
* @return true if the symbol has multiple body styles available.
|
||||
*/
|
||||
virtual bool IsMultiBodyStyle() const = 0;
|
||||
|
||||
/**
|
||||
* @return the number of body styles defined for the symbol.
|
||||
*/
|
||||
virtual int GetBodyStyleCount() const = 0;
|
||||
|
||||
virtual bool HasDeMorganBodyStyles() const = 0;
|
||||
|
||||
virtual const wxString GetRef( const SCH_SHEET_PATH* aSheet,
|
||||
bool aIncludeUnit = false ) const = 0;
|
||||
|
||||
|
@ -71,7 +71,7 @@ void CheckDuplicatePins( LIB_SYMBOL* aSymbol, std::vector<wxString>& aMessages,
|
||||
if( !next->GetName().IsEmpty() )
|
||||
nextName = " '" + next->GetName() + "'";
|
||||
|
||||
if( aSymbol->HasAlternateBodyStyle() && next->GetBodyStyle() )
|
||||
if( aSymbol->IsMultiBodyStyle() && next->GetBodyStyle() )
|
||||
{
|
||||
if( pin->GetUnit() == 0 || next->GetUnit() == 0 )
|
||||
{
|
||||
@ -217,12 +217,6 @@ void CheckLibSymbol( LIB_SYMBOL* aSymbol, std::vector<wxString>& aMessages,
|
||||
aMessages.push_back( msg );
|
||||
}
|
||||
|
||||
if( aSymbol->HasAlternateBodyStyle() )
|
||||
{
|
||||
msg.Printf( _( "<b>A Power Symbol should not have DeMorgan variants</b><br><br>" ) );
|
||||
aMessages.push_back( msg );
|
||||
}
|
||||
|
||||
if( pinList.size() != 1 )
|
||||
{
|
||||
msg.Printf( _( "<b>A Power Symbol should have only one pin</b><br><br>" ) );
|
||||
@ -262,7 +256,7 @@ void CheckLibSymbol( LIB_SYMBOL* aSymbol, std::vector<wxString>& aMessages,
|
||||
&& !pin->IsVisible() )
|
||||
{
|
||||
// hidden power pin
|
||||
if( aSymbol->HasAlternateBodyStyle() && pin->GetBodyStyle() )
|
||||
if( aSymbol->IsMultiBodyStyle() && pin->GetBodyStyle() )
|
||||
{
|
||||
if( aSymbol->GetUnitCount() <= 1 )
|
||||
{
|
||||
@ -321,7 +315,7 @@ void CheckLibSymbol( LIB_SYMBOL* aSymbol, std::vector<wxString>& aMessages,
|
||||
// pin is off grid
|
||||
msg.Empty();
|
||||
|
||||
if( aSymbol->HasAlternateBodyStyle() && pin->GetBodyStyle() )
|
||||
if( aSymbol->IsMultiBodyStyle() && pin->GetBodyStyle() )
|
||||
{
|
||||
if( aSymbol->GetUnitCount() <= 1 )
|
||||
{
|
||||
|
@ -56,7 +56,7 @@ std::unique_ptr<LIB_SYMBOL> LIB_SYMBOL_LIBRARY_MANAGER::CreateSymbol( const NEW_
|
||||
if( !aParent )
|
||||
{
|
||||
new_symbol->GetReferenceField().SetText( aProps.reference );
|
||||
new_symbol->SetUnitCount( aProps.unitCount );
|
||||
new_symbol->SetUnitCount( aProps.unitCount, true );
|
||||
|
||||
if( aProps.pinNameInside )
|
||||
{
|
||||
@ -80,7 +80,8 @@ std::unique_ptr<LIB_SYMBOL> LIB_SYMBOL_LIBRARY_MANAGER::CreateSymbol( const NEW_
|
||||
if( aProps.unitCount < 2 )
|
||||
new_symbol->LockUnits( false );
|
||||
|
||||
new_symbol->SetHasAlternateBodyStyle( aProps.alternateBodyStyle );
|
||||
if( aProps.alternateBodyStyle )
|
||||
new_symbol->SetBodyStyleCount( 2, false, true );
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -113,7 +113,6 @@ void SYMBOL_EDIT_FRAME::doReCreateMenuBar()
|
||||
|
||||
editMenu->AppendSeparator();
|
||||
editMenu->Add( SCH_ACTIONS::pinTable );
|
||||
editMenu->Add( SCH_ACTIONS::setUnitDisplayName );
|
||||
editMenu->Add( SCH_ACTIONS::updateSymbolFields );
|
||||
|
||||
|
||||
|
@ -94,6 +94,7 @@ bool SYMBOL_EDIT_FRAME::m_showDeMorgan = false;
|
||||
|
||||
BEGIN_EVENT_TABLE( SYMBOL_EDIT_FRAME, SCH_BASE_FRAME )
|
||||
EVT_COMBOBOX( ID_LIBEDIT_SELECT_UNIT_NUMBER, SYMBOL_EDIT_FRAME::OnSelectUnit )
|
||||
EVT_COMBOBOX( ID_LIBEDIT_SELECT_BODY_STYLE, SYMBOL_EDIT_FRAME::OnSelectBodyStyle )
|
||||
|
||||
// menubar commands
|
||||
EVT_MENU( wxID_EXIT, SYMBOL_EDIT_FRAME::OnExitKiCad )
|
||||
@ -101,6 +102,7 @@ BEGIN_EVENT_TABLE( SYMBOL_EDIT_FRAME, SCH_BASE_FRAME )
|
||||
|
||||
// Update user interface elements.
|
||||
EVT_UPDATE_UI( ID_LIBEDIT_SELECT_UNIT_NUMBER, SYMBOL_EDIT_FRAME::OnUpdateUnitNumber )
|
||||
EVT_UPDATE_UI( ID_LIBEDIT_SELECT_BODY_STYLE, SYMBOL_EDIT_FRAME::OnUpdateBodyStyle )
|
||||
|
||||
// Drop files event
|
||||
EVT_DROP_FILES( SYMBOL_EDIT_FRAME::OnDropFiles )
|
||||
@ -113,9 +115,9 @@ SYMBOL_EDIT_FRAME::SYMBOL_EDIT_FRAME( KIWAY* aKiway, wxWindow* aParent ) :
|
||||
wxDefaultPosition, wxDefaultSize, KICAD_DEFAULT_DRAWFRAME_STYLE,
|
||||
LIB_EDIT_FRAME_NAME ),
|
||||
m_unitSelectBox( nullptr ),
|
||||
m_bodyStyleSelectBox( nullptr ),
|
||||
m_isSymbolFromSchematic( false )
|
||||
{
|
||||
SetShowDeMorgan( false );
|
||||
m_SyncPinEdit = false;
|
||||
|
||||
m_symbol = nullptr;
|
||||
@ -190,7 +192,7 @@ SYMBOL_EDIT_FRAME::SYMBOL_EDIT_FRAME( KIWAY* aKiway, wxWindow* aParent ) :
|
||||
|
||||
UpdateTitle();
|
||||
UpdateSymbolMsgPanelInfo();
|
||||
RebuildSymbolUnitsList();
|
||||
RebuildSymbolUnitAndBodyStyleLists();
|
||||
|
||||
m_propertiesPanel = new SCH_PROPERTIES_PANEL( this, this );
|
||||
m_propertiesPanel->SetSplitterProportion( m_settings->m_AuiPanels.properties_splitter );
|
||||
@ -560,34 +562,16 @@ void SYMBOL_EDIT_FRAME::setupUIConditions()
|
||||
mgr->SetConditions( SCH_ACTIONS::showHiddenFields, CHECK( hiddenFieldCond ) );
|
||||
mgr->SetConditions( SCH_ACTIONS::togglePinAltIcons, CHECK( showPinAltIconsCond ) );
|
||||
|
||||
auto demorganCond =
|
||||
[this]( const SELECTION& )
|
||||
{
|
||||
return GetShowDeMorgan();
|
||||
};
|
||||
|
||||
auto demorganStandardCond =
|
||||
[this]( const SELECTION& )
|
||||
{
|
||||
return m_bodyStyle == BODY_STYLE::BASE;
|
||||
};
|
||||
|
||||
auto demorganAlternateCond =
|
||||
[this]( const SELECTION& )
|
||||
{
|
||||
return m_bodyStyle == BODY_STYLE::DEMORGAN;
|
||||
};
|
||||
|
||||
auto multiUnitModeCond =
|
||||
[this]( const SELECTION& )
|
||||
{
|
||||
return m_symbol && m_symbol->IsMulti() && !m_symbol->UnitsLocked();
|
||||
return m_symbol && m_symbol->IsMultiUnit() && !m_symbol->UnitsLocked();
|
||||
};
|
||||
|
||||
auto hasMultipleUnitsCond =
|
||||
auto multiBodyStyleModeCond =
|
||||
[this]( const SELECTION& )
|
||||
{
|
||||
return m_symbol && m_symbol->IsMulti();
|
||||
return m_symbol && m_symbol->IsMultiBodyStyle();
|
||||
};
|
||||
|
||||
auto syncedPinsModeCond =
|
||||
@ -606,11 +590,9 @@ void SYMBOL_EDIT_FRAME::setupUIConditions()
|
||||
mgr->SetConditions( SCH_ACTIONS::symbolProperties, ENABLE( canEditProperties && haveSymbolCond ) );
|
||||
mgr->SetConditions( SCH_ACTIONS::runERC, ENABLE( haveSymbolCond ) );
|
||||
mgr->SetConditions( SCH_ACTIONS::pinTable, ENABLE( isEditableCond && haveSymbolCond ) );
|
||||
mgr->SetConditions( SCH_ACTIONS::cycleBodyStyle, ENABLE( multiBodyStyleModeCond ) );
|
||||
|
||||
mgr->SetConditions( SCH_ACTIONS::showDeMorganStandard, ACTION_CONDITIONS().Enable( demorganCond ).Check( demorganStandardCond ) );
|
||||
mgr->SetConditions( SCH_ACTIONS::showDeMorganAlternate, ACTION_CONDITIONS().Enable( demorganCond ).Check( demorganAlternateCond ) );
|
||||
mgr->SetConditions( SCH_ACTIONS::toggleSyncedPinsMode, ACTION_CONDITIONS().Enable( multiUnitModeCond ).Check( syncedPinsModeCond ) );
|
||||
mgr->SetConditions( SCH_ACTIONS::setUnitDisplayName, ACTION_CONDITIONS().Enable( isEditableCond && hasMultipleUnitsCond ) );
|
||||
|
||||
// Only enable a tool if the symbol is edtable
|
||||
#define EDIT_TOOL( tool ) ACTION_CONDITIONS().Enable( isEditableCond ).Check( cond.CurrentTool( tool ) )
|
||||
@ -705,33 +687,58 @@ void SYMBOL_EDIT_FRAME::doCloseWindow()
|
||||
}
|
||||
|
||||
|
||||
void SYMBOL_EDIT_FRAME::RebuildSymbolUnitsList()
|
||||
void SYMBOL_EDIT_FRAME::RebuildSymbolUnitAndBodyStyleLists()
|
||||
{
|
||||
if( !m_unitSelectBox )
|
||||
return;
|
||||
|
||||
if( m_unitSelectBox->GetCount() != 0 )
|
||||
m_unitSelectBox->Clear();
|
||||
|
||||
if( !m_symbol || m_symbol->GetUnitCount() <= 1 )
|
||||
if( m_unitSelectBox )
|
||||
{
|
||||
m_unit = 1;
|
||||
m_unitSelectBox->Append( wxEmptyString );
|
||||
}
|
||||
else
|
||||
{
|
||||
for( int i = 0; i < m_symbol->GetUnitCount(); i++ )
|
||||
if( m_unitSelectBox->GetCount() != 0 )
|
||||
m_unitSelectBox->Clear();
|
||||
|
||||
if( !m_symbol || m_symbol->GetUnitCount() <= 1 )
|
||||
{
|
||||
wxString unitDisplayName = m_symbol->GetUnitDisplayName( i + 1, true );
|
||||
m_unitSelectBox->Append( unitDisplayName );
|
||||
m_unit = 1;
|
||||
m_unitSelectBox->Append( wxEmptyString );
|
||||
}
|
||||
else
|
||||
{
|
||||
for( int i = 0; i < m_symbol->GetUnitCount(); i++ )
|
||||
m_unitSelectBox->Append( m_symbol->GetUnitDisplayName( i + 1, true ) );
|
||||
}
|
||||
|
||||
// Ensure the selected unit is compatible with the number of units of the current symbol:
|
||||
if( m_symbol && m_symbol->GetUnitCount() < m_unit )
|
||||
m_unit = 1;
|
||||
|
||||
m_unitSelectBox->SetSelection( ( m_unit > 0 ) ? m_unit - 1 : 0 );
|
||||
}
|
||||
|
||||
// Ensure the selected unit is compatible with the number of units of the current symbol:
|
||||
if( m_symbol && m_symbol->GetUnitCount() < m_unit )
|
||||
m_unit = 1;
|
||||
if( m_bodyStyleSelectBox )
|
||||
{
|
||||
if( m_bodyStyleSelectBox->GetCount() != 0 )
|
||||
m_bodyStyleSelectBox->Clear();
|
||||
|
||||
m_unitSelectBox->SetSelection(( m_unit > 0 ) ? m_unit - 1 : 0 );
|
||||
if( !m_symbol || !m_symbol->IsMultiBodyStyle() )
|
||||
{
|
||||
m_bodyStyle = 1;
|
||||
m_bodyStyleSelectBox->Append( wxEmptyString );
|
||||
}
|
||||
else if( m_symbol && m_symbol->HasDeMorganBodyStyles() )
|
||||
{
|
||||
m_bodyStyleSelectBox->Append( wxGetTranslation( DEMORGAN_STD ) );
|
||||
m_bodyStyleSelectBox->Append( wxGetTranslation( DEMORGAN_ALT ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
for( int i = 0; i < m_symbol->GetBodyStyleCount(); i++ )
|
||||
m_bodyStyleSelectBox->Append( m_symbol->GetBodyStyleNames()[i] );
|
||||
}
|
||||
|
||||
// Ensure the selected body style is compatible with the number of body styles of the current symbol:
|
||||
if( m_symbol && m_symbol->GetBodyStyleCount() < m_bodyStyle )
|
||||
m_bodyStyle = 1;
|
||||
|
||||
m_bodyStyleSelectBox->SetSelection( ( m_bodyStyle > 0 ) ? m_bodyStyle - 1 : 0 );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -811,12 +818,25 @@ void SYMBOL_EDIT_FRAME::OnUpdateUnitNumber( wxUpdateUIEvent& event )
|
||||
|
||||
void SYMBOL_EDIT_FRAME::OnSelectUnit( wxCommandEvent& event )
|
||||
{
|
||||
int i = event.GetSelection();
|
||||
|
||||
if( i == wxNOT_FOUND )
|
||||
if( event.GetSelection() == wxNOT_FOUND )
|
||||
return;
|
||||
|
||||
SetUnit( i + 1 );
|
||||
SetUnit( event.GetSelection() + 1 );
|
||||
}
|
||||
|
||||
|
||||
void SYMBOL_EDIT_FRAME::OnUpdateBodyStyle( wxUpdateUIEvent& event )
|
||||
{
|
||||
event.Enable( m_symbol && m_symbol->GetBodyStyleCount() > 1 );
|
||||
}
|
||||
|
||||
|
||||
void SYMBOL_EDIT_FRAME::OnSelectBodyStyle( wxCommandEvent& event )
|
||||
{
|
||||
if( event.GetSelection() == wxNOT_FOUND )
|
||||
return;
|
||||
|
||||
SetBodyStyle( event.GetSelection() + 1 );
|
||||
}
|
||||
|
||||
|
||||
@ -893,7 +913,7 @@ void SYMBOL_EDIT_FRAME::SetCurSymbol( LIB_SYMBOL* aSymbol, bool aUpdateZoom )
|
||||
Prj().SetRString( PROJECT::SCH_LIBEDIT_CUR_SYMBOL, symbolName );
|
||||
|
||||
// Ensure synchronized pin edit can be enabled only symbols with interchangeable units
|
||||
m_SyncPinEdit = aSymbol && aSymbol->IsRoot() && aSymbol->IsMulti() && !aSymbol->UnitsLocked();
|
||||
m_SyncPinEdit = aSymbol && aSymbol->IsRoot() && aSymbol->IsMultiUnit() && !aSymbol->UnitsLocked();
|
||||
|
||||
m_toolManager->ResetTools( TOOL_BASE::MODEL_RELOAD );
|
||||
|
||||
@ -1076,9 +1096,31 @@ void SYMBOL_EDIT_FRAME::SetUnit( int aUnit )
|
||||
}
|
||||
|
||||
|
||||
void SYMBOL_EDIT_FRAME::SetBodyStyle( int aBodyStyle )
|
||||
{
|
||||
wxCHECK( aBodyStyle > 0 && aBodyStyle <= GetCurSymbol()->GetBodyStyleCount(), /* void */ );
|
||||
|
||||
if( m_bodyStyle == aBodyStyle )
|
||||
return;
|
||||
|
||||
m_toolManager->RunAction( ACTIONS::cancelInteractive );
|
||||
m_toolManager->RunAction( ACTIONS::selectionClear );
|
||||
|
||||
m_bodyStyle = aBodyStyle;
|
||||
|
||||
if( m_bodyStyleSelectBox->GetSelection() != ( m_bodyStyle - 1 ) )
|
||||
m_bodyStyleSelectBox->SetSelection( m_bodyStyle - 1 );
|
||||
|
||||
|
||||
m_toolManager->ResetTools( TOOL_BASE::MODEL_RELOAD );
|
||||
RebuildView();
|
||||
UpdateSymbolMsgPanelInfo();
|
||||
}
|
||||
|
||||
|
||||
bool SYMBOL_EDIT_FRAME::SynchronizePins()
|
||||
{
|
||||
return m_SyncPinEdit && m_symbol && m_symbol->IsMulti() && !m_symbol->UnitsLocked();
|
||||
return m_SyncPinEdit && m_symbol && m_symbol->IsMultiUnit() && !m_symbol->UnitsLocked();
|
||||
}
|
||||
|
||||
|
||||
@ -1656,8 +1698,7 @@ void SYMBOL_EDIT_FRAME::KiwayMailIn( KIWAY_EXPRESS& mail )
|
||||
|
||||
SetScreen( symbol_screen );
|
||||
SetCurSymbol( new LIB_SYMBOL( *lib_symbol ), false );
|
||||
RebuildSymbolUnitsList();
|
||||
SetShowDeMorgan( GetCurSymbol()->HasAlternateBodyStyle() );
|
||||
RebuildSymbolUnitAndBodyStyleLists();
|
||||
|
||||
if( m_toolManager )
|
||||
m_toolManager->ResetTools( TOOL_BASE::MODEL_RELOAD );
|
||||
@ -1837,8 +1878,7 @@ void SYMBOL_EDIT_FRAME::LoadSymbolFromSchematic( SCH_SYMBOL* aSymbol )
|
||||
ToggleLibraryTree();
|
||||
|
||||
UpdateTitle();
|
||||
RebuildSymbolUnitsList();
|
||||
SetShowDeMorgan( GetCurSymbol()->HasAlternateBodyStyle() );
|
||||
RebuildSymbolUnitAndBodyStyleLists();
|
||||
UpdateSymbolMsgPanelInfo();
|
||||
|
||||
// Let tools add things to the view if necessary
|
||||
|
@ -43,6 +43,12 @@ class SYMBOL_EDITOR_SETTINGS;
|
||||
class EDA_LIST_DIALOG;
|
||||
|
||||
|
||||
#define UNITS_ALL _HKI( "ALL" )
|
||||
#define DEMORGAN_ALL _HKI( "ALL" )
|
||||
#define DEMORGAN_STD _HKI( "Standard" )
|
||||
#define DEMORGAN_ALT _HKI( "Alternate" )
|
||||
|
||||
|
||||
/**
|
||||
* The symbol library editor main window.
|
||||
*/
|
||||
@ -180,6 +186,7 @@ public:
|
||||
void DuplicateSymbol( bool aFromClipboard );
|
||||
|
||||
void OnSelectUnit( wxCommandEvent& event );
|
||||
void OnSelectBodyStyle( wxCommandEvent& event );
|
||||
|
||||
void ToggleProperties() override;
|
||||
|
||||
@ -190,9 +197,10 @@ public:
|
||||
void ThawLibraryTree();
|
||||
|
||||
void OnUpdateUnitNumber( wxUpdateUIEvent& event );
|
||||
void OnUpdateBodyStyle( wxUpdateUIEvent& event );
|
||||
|
||||
void UpdateAfterSymbolProperties( wxString* aOldName = nullptr );
|
||||
void RebuildSymbolUnitsList();
|
||||
void RebuildSymbolUnitAndBodyStyleLists();
|
||||
|
||||
bool canCloseWindow( wxCloseEvent& aCloseEvent ) override;
|
||||
void doCloseWindow() override;
|
||||
@ -232,10 +240,7 @@ public:
|
||||
void SetUnit( int aUnit );
|
||||
|
||||
int GetBodyStyle() const { return m_bodyStyle; }
|
||||
void SetBodyStyle( int aBodyStyle ) { m_bodyStyle = aBodyStyle; }
|
||||
|
||||
bool GetShowDeMorgan() const { return m_showDeMorgan; }
|
||||
void SetShowDeMorgan( bool show ) { m_showDeMorgan = show; }
|
||||
void SetBodyStyle( int aBodyStyle );
|
||||
|
||||
bool GetShowInvisibleFields();
|
||||
bool GetShowInvisiblePins();
|
||||
@ -545,17 +550,18 @@ public:
|
||||
|
||||
private:
|
||||
///< Helper screen used when no symbol is loaded
|
||||
SCH_SCREEN* m_dummyScreen;
|
||||
SCH_SCREEN* m_dummyScreen;
|
||||
|
||||
LIB_SYMBOL* m_symbol; // a symbol I own, it is not in any library, but a
|
||||
// copy could be.
|
||||
wxComboBox* m_unitSelectBox; // a ComboBox to select a unit to edit (if the
|
||||
// symbol has multiple units)
|
||||
SYMBOL_TREE_PANE* m_treePane; // symbol search tree widget
|
||||
LIB_SYMBOL* m_symbol; // a symbol I own, it is not in any library, but a copy could be.
|
||||
wxComboBox* m_unitSelectBox; // a ComboBox to select a unit to edit (if the
|
||||
// symbol has multiple units)
|
||||
wxComboBox* m_bodyStyleSelectBox; // a ComboBox to select a body style to edit (if the symbol has
|
||||
// multiple body styles)
|
||||
SYMBOL_TREE_PANE* m_treePane; // symbol search tree widget
|
||||
LIB_SYMBOL_LIBRARY_MANAGER* m_libMgr; // manager taking care of temporary modifications
|
||||
SYMBOL_EDITOR_SETTINGS* m_settings; // Handle to the settings
|
||||
SYMBOL_EDITOR_SETTINGS* m_settings; // Handle to the settings
|
||||
|
||||
LIB_ID m_centerItemOnIdle;
|
||||
LIB_ID m_centerItemOnIdle;
|
||||
|
||||
// The unit number to edit and show
|
||||
int m_unit;
|
||||
|
@ -243,14 +243,12 @@ bool SYMBOL_EDIT_FRAME::LoadSymbolFromCurrentLib( const wxString& aSymbolName, i
|
||||
return false;
|
||||
|
||||
// Enable synchronized pin edit mode for symbols with interchangeable units
|
||||
m_SyncPinEdit = GetCurSymbol()->IsMulti() && !GetCurSymbol()->UnitsLocked();
|
||||
m_SyncPinEdit = GetCurSymbol()->IsMultiUnit() && !GetCurSymbol()->UnitsLocked();
|
||||
|
||||
ClearUndoRedoList();
|
||||
m_toolManager->RunAction( ACTIONS::zoomFitScreen );
|
||||
SetShowDeMorgan( GetCurSymbol()->Flatten()->HasAlternateBodyStyle() );
|
||||
|
||||
if( aUnit > 0 )
|
||||
RebuildSymbolUnitsList();
|
||||
RebuildSymbolUnitAndBodyStyleLists();
|
||||
|
||||
return true;
|
||||
}
|
||||
@ -306,8 +304,7 @@ bool SYMBOL_EDIT_FRAME::LoadOneLibrarySymbolAux( LIB_SYMBOL* aEntry, const wxStr
|
||||
}
|
||||
|
||||
UpdateTitle();
|
||||
RebuildSymbolUnitsList();
|
||||
SetShowDeMorgan( GetCurSymbol()->HasAlternateBodyStyle() );
|
||||
RebuildSymbolUnitAndBodyStyleLists();
|
||||
|
||||
ClearUndoRedoList();
|
||||
|
||||
@ -414,13 +411,6 @@ void SYMBOL_EDIT_FRAME::CreateNewSymbol( const wxString& aInheritFrom )
|
||||
m_libMgr->CreateNewSymbol( lib, props );
|
||||
SyncLibraries( false );
|
||||
LoadSymbol( props.name, lib, 1 );
|
||||
|
||||
LIB_SYMBOL* createdSymbol = m_libMgr->GetSymbol( props.name, lib );
|
||||
|
||||
if( props.parentSymbolName.IsEmpty() )
|
||||
SetShowDeMorgan( props.alternateBodyStyle );
|
||||
else if( createdSymbol )
|
||||
SetShowDeMorgan( createdSymbol->HasAlternateBodyStyle() );
|
||||
}
|
||||
|
||||
|
||||
@ -1231,8 +1221,7 @@ void SYMBOL_EDIT_FRAME::UpdateAfterSymbolProperties( wxString* aOldName )
|
||||
m_treePane->GetLibTree()->SelectLibId( LIB_ID( lib, m_symbol->GetName() ) );
|
||||
}
|
||||
|
||||
RebuildSymbolUnitsList();
|
||||
SetShowDeMorgan( GetCurSymbol()->Flatten()->HasAlternateBodyStyle() );
|
||||
RebuildSymbolUnitAndBodyStyleLists();
|
||||
UpdateTitle();
|
||||
|
||||
// N.B. The view needs to be rebuilt first as the Symbol Properties change may invalidate
|
||||
@ -1623,7 +1612,7 @@ bool SYMBOL_EDIT_FRAME::saveLibrary( const wxString& aLibrary, bool aNewFile )
|
||||
|
||||
ClearMsgPanel();
|
||||
msg.Printf( _( "Symbol library file '%s' saved." ), fn.GetFullPath() );
|
||||
RebuildSymbolUnitsList();
|
||||
RebuildSymbolUnitAndBodyStyleLists();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -103,8 +103,7 @@ void SYMBOL_EDIT_FRAME::GetSymbolFromRedoList()
|
||||
m_treePane->GetLibTree()->SelectLibId( LIB_ID( lib, symbol->GetName() ) );
|
||||
}
|
||||
|
||||
RebuildSymbolUnitsList();
|
||||
SetShowDeMorgan( symbol->HasAlternateBodyStyle() );
|
||||
RebuildSymbolUnitAndBodyStyleLists();
|
||||
UpdateTitle();
|
||||
|
||||
RebuildView();
|
||||
@ -154,8 +153,7 @@ void SYMBOL_EDIT_FRAME::GetSymbolFromUndoList()
|
||||
m_treePane->GetLibTree()->SelectLibId( LIB_ID( lib, symbol->GetName() ) );
|
||||
}
|
||||
|
||||
RebuildSymbolUnitsList();
|
||||
SetShowDeMorgan( symbol->HasAlternateBodyStyle() );
|
||||
RebuildSymbolUnitAndBodyStyleLists();
|
||||
UpdateTitle();
|
||||
|
||||
RebuildView();
|
||||
|
@ -145,8 +145,7 @@ std::optional<TOOLBAR_CONFIGURATION> SYMBOL_EDIT_TOOLBAR_SETTINGS::DefaultToolba
|
||||
.AppendAction( SCH_ACTIONS::checkSymbol );
|
||||
|
||||
config.AppendSeparator()
|
||||
.AppendAction( SCH_ACTIONS::showDeMorganStandard )
|
||||
.AppendAction( SCH_ACTIONS::showDeMorganAlternate );
|
||||
.AppendControl( ACTION_TOOLBAR_CONTROLS::bodyStyleSelector );
|
||||
|
||||
config.AppendSeparator()
|
||||
.AppendControl( ACTION_TOOLBAR_CONTROLS::unitSelector );
|
||||
@ -182,6 +181,21 @@ void SYMBOL_EDIT_FRAME::configureToolbars()
|
||||
aToolbar->Add( m_unitSelectBox );
|
||||
};
|
||||
|
||||
auto bodyDisplayFactory =
|
||||
[this]( ACTION_TOOLBAR* aToolbar )
|
||||
{
|
||||
if( !m_bodyStyleSelectBox )
|
||||
{
|
||||
m_bodyStyleSelectBox = new wxComboBox( aToolbar, ID_LIBEDIT_SELECT_BODY_STYLE,
|
||||
wxEmptyString, wxDefaultPosition,
|
||||
wxSize( LISTBOX_WIDTH, -1 ), 0,
|
||||
nullptr, wxCB_READONLY );
|
||||
}
|
||||
|
||||
aToolbar->Add( m_bodyStyleSelectBox );
|
||||
};
|
||||
|
||||
RegisterCustomToolbarControlFactory( ACTION_TOOLBAR_CONTROLS::unitSelector, unitDisplayFactory );
|
||||
RegisterCustomToolbarControlFactory( ACTION_TOOLBAR_CONTROLS::bodyStyleSelector, bodyDisplayFactory );
|
||||
}
|
||||
|
||||
|
@ -86,6 +86,7 @@ BEGIN_EVENT_TABLE( SYMBOL_VIEWER_FRAME, SCH_BASE_FRAME )
|
||||
EVT_TOOL( ID_LIBVIEW_NEXT, SYMBOL_VIEWER_FRAME::onSelectNextSymbol )
|
||||
EVT_TOOL( ID_LIBVIEW_PREVIOUS, SYMBOL_VIEWER_FRAME::onSelectPreviousSymbol )
|
||||
EVT_CHOICE( ID_LIBVIEW_SELECT_UNIT_NUMBER, SYMBOL_VIEWER_FRAME::onSelectSymbolUnit )
|
||||
EVT_CHOICE( ID_LIBVIEW_SELECT_BODY_STYLE, SYMBOL_VIEWER_FRAME::onSelectSymbolBodyStyle )
|
||||
|
||||
// listbox events
|
||||
EVT_TEXT( ID_LIBVIEW_LIB_FILTER, SYMBOL_VIEWER_FRAME::OnLibFilter )
|
||||
@ -98,6 +99,7 @@ BEGIN_EVENT_TABLE( SYMBOL_VIEWER_FRAME, SCH_BASE_FRAME )
|
||||
EVT_MENU( wxID_CLOSE, SYMBOL_VIEWER_FRAME::CloseLibraryViewer )
|
||||
|
||||
EVT_UPDATE_UI( ID_LIBVIEW_SELECT_UNIT_NUMBER, SYMBOL_VIEWER_FRAME::onUpdateUnitChoice )
|
||||
EVT_UPDATE_UI( ID_LIBVIEW_SELECT_BODY_STYLE, SYMBOL_VIEWER_FRAME::onUpdateBodyStyleChoice )
|
||||
|
||||
END_EVENT_TABLE()
|
||||
|
||||
@ -107,6 +109,7 @@ SYMBOL_VIEWER_FRAME::SYMBOL_VIEWER_FRAME( KIWAY* aKiway, wxWindow* aParent ) :
|
||||
wxDefaultPosition, wxDefaultSize, KICAD_DEFAULT_DRAWFRAME_STYLE,
|
||||
LIB_VIEW_FRAME_NAME ),
|
||||
m_unitChoice( nullptr ),
|
||||
m_bodyStyleChoice( nullptr ),
|
||||
m_libList( nullptr ),
|
||||
m_symbolList( nullptr )
|
||||
{
|
||||
@ -371,25 +374,6 @@ void SYMBOL_VIEWER_FRAME::setupUIConditions()
|
||||
return GetRenderSettings() && GetRenderSettings()->m_ShowPinNumbers;
|
||||
};
|
||||
|
||||
auto demorganCond =
|
||||
[this]( const SELECTION& )
|
||||
{
|
||||
LIB_SYMBOL* symbol = GetSelectedSymbol();
|
||||
return symbol && symbol->HasAlternateBodyStyle();
|
||||
};
|
||||
|
||||
auto demorganStandardCond =
|
||||
[]( const SELECTION& )
|
||||
{
|
||||
return m_bodyStyle == BODY_STYLE::BASE;
|
||||
};
|
||||
|
||||
auto demorganAlternateCond =
|
||||
[]( const SELECTION& )
|
||||
{
|
||||
return m_bodyStyle == BODY_STYLE::DEMORGAN;
|
||||
};
|
||||
|
||||
auto haveDatasheetCond =
|
||||
[this]( const SELECTION& )
|
||||
{
|
||||
@ -401,9 +385,6 @@ void SYMBOL_VIEWER_FRAME::setupUIConditions()
|
||||
mgr->SetConditions( SCH_ACTIONS::showElectricalTypes, CHECK( electricalTypesShownCondition ) );
|
||||
mgr->SetConditions( SCH_ACTIONS::showPinNumbers, CHECK( pinNumbersShownCondition ) );
|
||||
|
||||
mgr->SetConditions( SCH_ACTIONS::showDeMorganStandard, ACTION_CONDITIONS().Enable( demorganCond ).Check( demorganStandardCond ) );
|
||||
mgr->SetConditions( SCH_ACTIONS::showDeMorganAlternate, ACTION_CONDITIONS().Enable( demorganCond ).Check( demorganAlternateCond ) );
|
||||
|
||||
#undef CHECK
|
||||
#undef ENABLE
|
||||
}
|
||||
@ -498,28 +479,50 @@ void SYMBOL_VIEWER_FRAME::onUpdateUnitChoice( wxUpdateUIEvent& aEvent )
|
||||
unit_count = std::max( symbol->GetUnitCount(), 1 );
|
||||
|
||||
m_unitChoice->Enable( unit_count > 1 );
|
||||
m_unitChoice->Clear();
|
||||
|
||||
if( unit_count > 1 )
|
||||
{
|
||||
// rebuild the unit list if it is not suitable (after a new selection for instance)
|
||||
if( unit_count != (int)m_unitChoice->GetCount() )
|
||||
if( unit_count != (int) m_unitChoice->GetCount() )
|
||||
{
|
||||
m_unitChoice->Clear();
|
||||
|
||||
for( int ii = 0; ii < unit_count; ii++ )
|
||||
{
|
||||
wxString unit = symbol->GetUnitDisplayName( ii + 1, true );
|
||||
m_unitChoice->Append( unit );
|
||||
}
|
||||
|
||||
m_unitChoice->Append( symbol->GetUnitDisplayName( ii + 1, true ) );
|
||||
}
|
||||
|
||||
if( m_unitChoice->GetSelection() != std::max( 0, m_unit - 1 ) )
|
||||
m_unitChoice->SetSelection( std::max( 0, m_unit - 1 ) );
|
||||
}
|
||||
else if( m_unitChoice->GetCount() )
|
||||
}
|
||||
|
||||
|
||||
void SYMBOL_VIEWER_FRAME::onUpdateBodyStyleChoice( wxUpdateUIEvent& aEvent )
|
||||
{
|
||||
LIB_SYMBOL* symbol = GetSelectedSymbol();
|
||||
|
||||
int bodyStyle_count = 1;
|
||||
|
||||
if( symbol )
|
||||
bodyStyle_count = std::max( symbol->GetBodyStyleCount(), 1 );
|
||||
|
||||
m_bodyStyleChoice->Enable( bodyStyle_count > 1 );
|
||||
m_bodyStyleChoice->Clear();
|
||||
|
||||
if( bodyStyle_count > 1 )
|
||||
{
|
||||
m_unitChoice->Clear();
|
||||
if( symbol && symbol->HasDeMorganBodyStyles() )
|
||||
{
|
||||
m_bodyStyleChoice->Append( wxGetTranslation( DEMORGAN_STD ) );
|
||||
m_bodyStyleChoice->Append( wxGetTranslation( DEMORGAN_ALT ) );
|
||||
}
|
||||
else if( symbol )
|
||||
{
|
||||
for( int i = 0; i < symbol->GetBodyStyleCount(); i++ )
|
||||
m_bodyStyleChoice->Append( symbol->GetBodyStyleNames()[i] );
|
||||
}
|
||||
|
||||
if( m_bodyStyleChoice->GetSelection() != std::max( 0, m_bodyStyle - 1 ) )
|
||||
m_bodyStyleChoice->SetSelection( std::max( 0, m_bodyStyle - 1 ) );
|
||||
}
|
||||
}
|
||||
|
||||
@ -1105,6 +1108,19 @@ void SYMBOL_VIEWER_FRAME::onSelectSymbolUnit( wxCommandEvent& aEvent )
|
||||
}
|
||||
|
||||
|
||||
void SYMBOL_VIEWER_FRAME::onSelectSymbolBodyStyle( wxCommandEvent& aEvent )
|
||||
{
|
||||
int ii = m_bodyStyleChoice->GetSelection();
|
||||
|
||||
if( ii < 0 )
|
||||
return;
|
||||
|
||||
m_bodyStyle = ii + 1;
|
||||
|
||||
updatePreviewSymbol();
|
||||
}
|
||||
|
||||
|
||||
void SYMBOL_VIEWER_FRAME::DisplayLibInfos()
|
||||
{
|
||||
wxString libName = m_currentSymbol.GetUniStringLibNickname();
|
||||
|
@ -137,6 +137,7 @@ private:
|
||||
void DClickOnSymbolList( wxCommandEvent& event );
|
||||
|
||||
void onUpdateUnitChoice( wxUpdateUIEvent& aEvent );
|
||||
void onUpdateBodyStyleChoice( wxUpdateUIEvent& aEvent );
|
||||
|
||||
void OnLibFilter( wxCommandEvent& aEvent );
|
||||
void OnSymFilter( wxCommandEvent& aEvent );
|
||||
@ -145,6 +146,7 @@ private:
|
||||
void onSelectNextSymbol( wxCommandEvent& aEvent );
|
||||
void onSelectPreviousSymbol( wxCommandEvent& aEvent );
|
||||
void onSelectSymbolUnit( wxCommandEvent& aEvent );
|
||||
void onSelectSymbolBodyStyle( wxCommandEvent& aEvent );
|
||||
|
||||
void updatePreviewSymbol();
|
||||
|
||||
@ -152,6 +154,7 @@ private:
|
||||
|
||||
private:
|
||||
wxChoice* m_unitChoice;
|
||||
wxChoice* m_bodyStyleChoice;
|
||||
|
||||
wxSearchCtrl* m_libFilter;
|
||||
WX_LISTBOX* m_libList; // The list of libraries.
|
||||
|
@ -68,8 +68,7 @@ std::optional<TOOLBAR_CONFIGURATION> SYMBOL_VIEWER_TOOLBAR_SETTINGS::DefaultTool
|
||||
.AppendAction( SCH_ACTIONS::showPinNumbers );
|
||||
|
||||
config.AppendSeparator()
|
||||
.AppendAction( SCH_ACTIONS::showDeMorganStandard )
|
||||
.AppendAction( SCH_ACTIONS::showDeMorganAlternate );
|
||||
.AppendControl( ACTION_TOOLBAR_CONTROLS::bodyStyleSelector );
|
||||
|
||||
config.AppendSeparator()
|
||||
.AppendControl( ACTION_TOOLBAR_CONTROLS::unitSelector );
|
||||
@ -98,13 +97,26 @@ void SYMBOL_VIEWER_FRAME::configureToolbars()
|
||||
if( !m_unitChoice )
|
||||
{
|
||||
m_unitChoice = new wxChoice( m_tbTopMain, ID_LIBVIEW_SELECT_UNIT_NUMBER,
|
||||
wxDefaultPosition, wxSize( 150, -1 ) );
|
||||
wxDefaultPosition, wxSize( 150, -1 ) );
|
||||
}
|
||||
|
||||
aToolbar->Add( m_unitChoice );
|
||||
};
|
||||
|
||||
auto bodyChoiceFactory =
|
||||
[this]( ACTION_TOOLBAR* aToolbar )
|
||||
{
|
||||
if( !m_bodyStyleChoice )
|
||||
{
|
||||
m_bodyStyleChoice = new wxChoice( m_tbTopMain, ID_LIBVIEW_SELECT_BODY_STYLE,
|
||||
wxDefaultPosition, wxSize( 150, -1 ) );
|
||||
}
|
||||
|
||||
aToolbar->Add( m_bodyStyleChoice );
|
||||
};
|
||||
|
||||
RegisterCustomToolbarControlFactory( ACTION_TOOLBAR_CONTROLS::unitSelector, unitChoiceFactory );
|
||||
RegisterCustomToolbarControlFactory( ACTION_TOOLBAR_CONTROLS::bodyStyleSelector, bodyChoiceFactory );
|
||||
}
|
||||
|
||||
|
||||
|
@ -270,12 +270,6 @@ TOOL_ACTION SCH_ACTIONS::updateSymbolFields( TOOL_ACTION_ARGS()
|
||||
.Tooltip( _( "Update symbol to match changes made in parent symbol" ) )
|
||||
.Icon( BITMAPS::refresh ) );
|
||||
|
||||
TOOL_ACTION SCH_ACTIONS::setUnitDisplayName( TOOL_ACTION_ARGS()
|
||||
.Name( "eeschema.SymbolLibraryControl.setUnitDisplayName" )
|
||||
.Scope( AS_GLOBAL )
|
||||
.FriendlyName( _( "Set Unit Display Name..." ) )
|
||||
.Tooltip( _( "Set the display name for a particular unit in a multi-unit symbol" ) ) );
|
||||
|
||||
TOOL_ACTION SCH_ACTIONS::addSymbolToSchematic( TOOL_ACTION_ARGS()
|
||||
.Name( "eeschema.SymbolLibraryControl.addSymbolToSchematic" )
|
||||
.Scope( AS_GLOBAL )
|
||||
@ -846,27 +840,11 @@ TOOL_ACTION SCH_ACTIONS::assignNetclass( TOOL_ACTION_ARGS()
|
||||
.Tooltip( _( "Assign a netclass to nets matching a pattern" ) )
|
||||
.Icon( BITMAPS::netlist ) );
|
||||
|
||||
TOOL_ACTION SCH_ACTIONS::toggleDeMorgan( TOOL_ACTION_ARGS()
|
||||
TOOL_ACTION SCH_ACTIONS::cycleBodyStyle( TOOL_ACTION_ARGS()
|
||||
.Name( "eeschema.InteractiveEdit.toggleDeMorgan" )
|
||||
.Scope( AS_GLOBAL )
|
||||
.FriendlyName( _( "De Morgan Conversion" ) )
|
||||
.Tooltip( _( "Switch between De Morgan representations" ) )
|
||||
.Icon( BITMAPS::morgan2 ) );
|
||||
|
||||
TOOL_ACTION SCH_ACTIONS::showDeMorganStandard( TOOL_ACTION_ARGS()
|
||||
.Name( "eeschema.InteractiveEdit.showDeMorganStandard" )
|
||||
.Scope( AS_GLOBAL )
|
||||
.FriendlyName( _( "De Morgan Standard" ) )
|
||||
.Tooltip( _( "Switch to standard De Morgan representation" ) )
|
||||
.ToolbarState( TOOLBAR_STATE::TOGGLE )
|
||||
.Icon( BITMAPS::morgan1 ) );
|
||||
|
||||
TOOL_ACTION SCH_ACTIONS::showDeMorganAlternate( TOOL_ACTION_ARGS()
|
||||
.Name( "eeschema.InteractiveEdit.showDeMorganAlternate" )
|
||||
.Scope( AS_GLOBAL )
|
||||
.FriendlyName( _( "De Morgan Alternate" ) )
|
||||
.Tooltip( _( "Switch to alternate De Morgan representation" ) )
|
||||
.ToolbarState( TOOLBAR_STATE::TOGGLE )
|
||||
.FriendlyName( _( "Cycle Body Style" ) )
|
||||
.Tooltip( _( "Switch between De Morgan (or other) representations" ) )
|
||||
.Icon( BITMAPS::morgan2 ) );
|
||||
|
||||
TOOL_ACTION SCH_ACTIONS::toLabel( TOOL_ACTION_ARGS()
|
||||
|
@ -127,9 +127,7 @@ public:
|
||||
static TOOL_ACTION editValue;
|
||||
static TOOL_ACTION editFootprint;
|
||||
static TOOL_ACTION autoplaceFields;
|
||||
static TOOL_ACTION toggleDeMorgan;
|
||||
static TOOL_ACTION showDeMorganStandard;
|
||||
static TOOL_ACTION showDeMorganAlternate;
|
||||
static TOOL_ACTION cycleBodyStyle;
|
||||
static TOOL_ACTION editSymbolUnit;
|
||||
static TOOL_ACTION toLabel;
|
||||
static TOOL_ACTION toCLabel;
|
||||
@ -211,7 +209,6 @@ public:
|
||||
static TOOL_ACTION importSymbol;
|
||||
static TOOL_ACTION exportSymbol;
|
||||
static TOOL_ACTION updateSymbolFields;
|
||||
static TOOL_ACTION setUnitDisplayName;
|
||||
|
||||
// Hierarchy navigation
|
||||
static TOOL_ACTION changeSheet;
|
||||
|
@ -528,14 +528,14 @@ int SCH_DRAWING_TOOLS::PlaceSymbol( const TOOL_EVENT& aEvent )
|
||||
m_toolMgr->PostAction( ACTIONS::refreshPreview );
|
||||
}
|
||||
}
|
||||
else if( *evt->GetCommandId() >= ID_POPUP_SCH_SELECT_BASE
|
||||
&& *evt->GetCommandId() <= ID_POPUP_SCH_SELECT_ALT )
|
||||
else if( *evt->GetCommandId() >= ID_POPUP_SCH_SELECT_BODY_STYLE
|
||||
&& *evt->GetCommandId() <= ID_POPUP_SCH_SELECT_BODY_STYLE_END )
|
||||
{
|
||||
int bodyStyle = ( *evt->GetCommandId() - ID_POPUP_SCH_SELECT_BASE ) + 1;
|
||||
int bodyStyle = ( *evt->GetCommandId() - ID_POPUP_SCH_SELECT_BODY_STYLE ) + 1;
|
||||
|
||||
if( symbol && symbol->GetBodyStyle() != bodyStyle )
|
||||
{
|
||||
m_frame->FlipBodyStyle( symbol );
|
||||
m_frame->SelectBodyStyle( symbol, bodyStyle );
|
||||
m_toolMgr->PostAction( ACTIONS::refreshPreview );
|
||||
}
|
||||
}
|
||||
@ -612,7 +612,7 @@ int SCH_DRAWING_TOOLS::PlaceNextSymbolUnit( const TOOL_EVENT& aEvent )
|
||||
if( !symbol )
|
||||
return 0;
|
||||
|
||||
if( !symbol->IsMulti() )
|
||||
if( !symbol->IsMultiUnit() )
|
||||
{
|
||||
m_frame->ShowInfoBarMsg( _( "This symbol has only one unit." ) );
|
||||
return 0;
|
||||
|
@ -159,11 +159,23 @@ private:
|
||||
|
||||
wxCHECK( symbol, /* void */ );
|
||||
|
||||
item = Append( ID_POPUP_SCH_SELECT_BASE, _( "Standard" ), wxEmptyString, wxITEM_CHECK );
|
||||
item->Check( symbol->GetBodyStyle() == BODY_STYLE::BASE );
|
||||
if( symbol->HasDeMorganBodyStyles() )
|
||||
{
|
||||
item = Append( ID_POPUP_SCH_SELECT_BODY_STYLE, _( "Standard" ), wxEmptyString, wxITEM_CHECK );
|
||||
item->Check( symbol->GetBodyStyle() == BODY_STYLE::BASE );
|
||||
|
||||
item = Append( ID_POPUP_SCH_SELECT_ALT, _( "Alternate" ), wxEmptyString, wxITEM_CHECK );
|
||||
item->Check( symbol->GetBodyStyle() != BODY_STYLE::BASE );
|
||||
item = Append( ID_POPUP_SCH_SELECT_BODY_STYLE1, _( "Alternate" ), wxEmptyString, wxITEM_CHECK );
|
||||
item->Check( symbol->GetBodyStyle() != BODY_STYLE::BASE );
|
||||
}
|
||||
else if( symbol->IsMultiBodyStyle() )
|
||||
{
|
||||
for( int i = 0; i < symbol->GetBodyStyleCount(); i++ )
|
||||
{
|
||||
item = Append( ID_POPUP_SCH_SELECT_BODY_STYLE + i, symbol->GetBodyStyleDescription( i + 1, true ),
|
||||
wxEmptyString, wxITEM_CHECK );
|
||||
item->Check( symbol->GetBodyStyle() == i + 1 );
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
@ -658,7 +670,7 @@ bool SCH_EDIT_TOOL::Init()
|
||||
|
||||
moveMenu.AddSeparator();
|
||||
moveMenu.AddMenu( makeSymbolUnitMenu( moveTool ), S_C::SingleMultiUnitSymbol, 1 );
|
||||
moveMenu.AddMenu( makeBodyStyleMenu( moveTool ), S_C::SingleDeMorganSymbol, 1 );
|
||||
moveMenu.AddMenu( makeBodyStyleMenu( moveTool ), S_C::SingleMultiBodyStyleSymbol, 1 );
|
||||
|
||||
moveMenu.AddMenu( makeTransformMenu(), orientCondition, 200 );
|
||||
moveMenu.AddMenu( makeAttributesMenu(), S_C::HasType( SCH_SYMBOL_T ), 200 );
|
||||
@ -685,7 +697,7 @@ bool SCH_EDIT_TOOL::Init()
|
||||
drawMenu.AddSeparator( sheetSelection && SCH_CONDITIONS::Idle, 1 );
|
||||
|
||||
drawMenu.AddMenu( makeSymbolUnitMenu( drawingTools ), S_C::SingleMultiUnitSymbol, 1 );
|
||||
drawMenu.AddMenu( makeBodyStyleMenu( drawingTools ), S_C::SingleDeMorganSymbol, 1 );
|
||||
drawMenu.AddMenu( makeBodyStyleMenu( drawingTools ), S_C::SingleMultiBodyStyleSymbol, 1 );
|
||||
|
||||
drawMenu.AddMenu( makeTransformMenu(), orientCondition, 200 );
|
||||
drawMenu.AddMenu( makeAttributesMenu(), S_C::HasType( SCH_SYMBOL_T ), 200 );
|
||||
@ -707,7 +719,7 @@ bool SCH_EDIT_TOOL::Init()
|
||||
CONDITIONAL_MENU& selToolMenu = m_selectionTool->GetToolMenu().GetMenu();
|
||||
|
||||
selToolMenu.AddMenu( makeSymbolUnitMenu( m_selectionTool ), S_C::SingleMultiUnitSymbol, 1 );
|
||||
selToolMenu.AddMenu( makeBodyStyleMenu( m_selectionTool ), S_C::SingleDeMorganSymbol, 1 );
|
||||
selToolMenu.AddMenu( makeBodyStyleMenu( m_selectionTool ), S_C::SingleMultiBodyStyleSymbol, 1 );
|
||||
selToolMenu.AddMenu( makePinFunctionMenu( m_selectionTool ), S_C::SingleMultiFunctionPin, 1 );
|
||||
selToolMenu.AddMenu( makePinTricksMenu( m_selectionTool ), S_C::AllPinsOrSheetPins, 1 );
|
||||
|
||||
@ -1958,11 +1970,8 @@ int SCH_EDIT_TOOL::ChangeSymbols( const TOOL_EVENT& aEvent )
|
||||
|
||||
DIALOG_CHANGE_SYMBOLS::MODE mode = DIALOG_CHANGE_SYMBOLS::MODE::UPDATE;
|
||||
|
||||
if( aEvent.IsAction( &SCH_ACTIONS::changeSymbol )
|
||||
|| aEvent.IsAction( &SCH_ACTIONS::changeSymbols ) )
|
||||
{
|
||||
if( aEvent.IsAction( &SCH_ACTIONS::changeSymbol ) || aEvent.IsAction( &SCH_ACTIONS::changeSymbols ) )
|
||||
mode = DIALOG_CHANGE_SYMBOLS::MODE::CHANGE;
|
||||
}
|
||||
|
||||
DIALOG_CHANGE_SYMBOLS dlg( m_frame, selectedSymbol, mode );
|
||||
|
||||
@ -1976,7 +1985,7 @@ int SCH_EDIT_TOOL::ChangeSymbols( const TOOL_EVENT& aEvent )
|
||||
}
|
||||
|
||||
|
||||
int SCH_EDIT_TOOL::ChangeBodyStyle( const TOOL_EVENT& aEvent )
|
||||
int SCH_EDIT_TOOL::CycleBodyStyle( const TOOL_EVENT& aEvent )
|
||||
{
|
||||
SCH_SELECTION& selection = m_selectionTool->RequestSelection( { SCH_SYMBOL_T } );
|
||||
|
||||
@ -1984,25 +1993,17 @@ int SCH_EDIT_TOOL::ChangeBodyStyle( const TOOL_EVENT& aEvent )
|
||||
return 0;
|
||||
|
||||
SCH_SYMBOL* symbol = (SCH_SYMBOL*) selection.Front();
|
||||
|
||||
if( aEvent.IsAction( &SCH_ACTIONS::showDeMorganStandard )
|
||||
&& symbol->GetBodyStyle() == BODY_STYLE::BASE )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
if( aEvent.IsAction( &SCH_ACTIONS::showDeMorganAlternate )
|
||||
&& symbol->GetBodyStyle() == BODY_STYLE::DEMORGAN )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
SCH_COMMIT commit( m_toolMgr );
|
||||
SCH_COMMIT commit( m_toolMgr );
|
||||
|
||||
if( !symbol->IsNew() )
|
||||
commit.Modify( symbol, m_frame->GetScreen() );
|
||||
|
||||
m_frame->FlipBodyStyle( symbol );
|
||||
int nextBodyStyle = symbol->GetBodyStyle() + 1;
|
||||
|
||||
if( nextBodyStyle > symbol->GetBodyStyleCount() )
|
||||
nextBodyStyle = 1;
|
||||
|
||||
m_frame->SelectBodyStyle( symbol, nextBodyStyle );
|
||||
|
||||
if( symbol->IsNew() )
|
||||
m_toolMgr->PostAction( ACTIONS::refreshPreview );
|
||||
@ -3207,9 +3208,7 @@ void SCH_EDIT_TOOL::setTransitions()
|
||||
Go( &SCH_EDIT_TOOL::ChangeSymbols, SCH_ACTIONS::updateSymbols.MakeEvent() );
|
||||
Go( &SCH_EDIT_TOOL::ChangeSymbols, SCH_ACTIONS::changeSymbol.MakeEvent() );
|
||||
Go( &SCH_EDIT_TOOL::ChangeSymbols, SCH_ACTIONS::updateSymbol.MakeEvent() );
|
||||
Go( &SCH_EDIT_TOOL::ChangeBodyStyle, SCH_ACTIONS::toggleDeMorgan.MakeEvent() );
|
||||
Go( &SCH_EDIT_TOOL::ChangeBodyStyle, SCH_ACTIONS::showDeMorganStandard.MakeEvent() );
|
||||
Go( &SCH_EDIT_TOOL::ChangeBodyStyle, SCH_ACTIONS::showDeMorganAlternate.MakeEvent() );
|
||||
Go( &SCH_EDIT_TOOL::CycleBodyStyle, SCH_ACTIONS::cycleBodyStyle.MakeEvent() );
|
||||
Go( &SCH_EDIT_TOOL::ChangeTextType, SCH_ACTIONS::toLabel.MakeEvent() );
|
||||
Go( &SCH_EDIT_TOOL::ChangeTextType, SCH_ACTIONS::toHLabel.MakeEvent() );
|
||||
Go( &SCH_EDIT_TOOL::ChangeTextType, SCH_ACTIONS::toGLabel.MakeEvent() );
|
||||
|
@ -49,7 +49,7 @@ public:
|
||||
int EditField( const TOOL_EVENT& aEvent );
|
||||
int AutoplaceFields( const TOOL_EVENT& aEvent );
|
||||
int ChangeSymbols( const TOOL_EVENT& aEvent );
|
||||
int ChangeBodyStyle( const TOOL_EVENT& aEvent );
|
||||
int CycleBodyStyle( const TOOL_EVENT& aEvent );
|
||||
int EditPageNumber( const TOOL_EVENT& aEvent );
|
||||
|
||||
/**
|
||||
|
@ -979,15 +979,15 @@ bool SCH_MOVE_TOOL::doMoveSelection( const TOOL_EVENT& aEvent, SCH_COMMIT* aComm
|
||||
m_toolMgr->PostAction( ACTIONS::refreshPreview );
|
||||
}
|
||||
}
|
||||
else if( *evt->GetCommandId() >= ID_POPUP_SCH_SELECT_BASE
|
||||
&& *evt->GetCommandId() <= ID_POPUP_SCH_SELECT_ALT )
|
||||
else if( *evt->GetCommandId() >= ID_POPUP_SCH_SELECT_BODY_STYLE
|
||||
&& *evt->GetCommandId() <= ID_POPUP_SCH_SELECT_BODY_STYLE_END )
|
||||
{
|
||||
SCH_SYMBOL* symbol = dynamic_cast<SCH_SYMBOL*>( selection.Front() );
|
||||
int bodyStyle = ( *evt->GetCommandId() - ID_POPUP_SCH_SELECT_BASE ) + 1;
|
||||
int bodyStyle = ( *evt->GetCommandId() - ID_POPUP_SCH_SELECT_BODY_STYLE ) + 1;
|
||||
|
||||
if( symbol && symbol->GetBodyStyle() != bodyStyle )
|
||||
{
|
||||
m_frame->FlipBodyStyle( symbol );
|
||||
m_frame->SelectBodyStyle( symbol, bodyStyle );
|
||||
m_toolMgr->PostAction( ACTIONS::refreshPreview );
|
||||
}
|
||||
}
|
||||
|
@ -80,14 +80,14 @@ SELECTION_CONDITION SCH_CONDITIONS::SingleSymbolOrPower = []( const SELECTION& a
|
||||
};
|
||||
|
||||
|
||||
SELECTION_CONDITION SCH_CONDITIONS::SingleDeMorganSymbol = []( const SELECTION& aSel )
|
||||
SELECTION_CONDITION SCH_CONDITIONS::SingleMultiBodyStyleSymbol = []( const SELECTION& aSel )
|
||||
{
|
||||
if( aSel.GetSize() == 1 )
|
||||
{
|
||||
SCH_SYMBOL* symbol = dynamic_cast<SCH_SYMBOL*>( aSel.Front() );
|
||||
|
||||
if( symbol )
|
||||
return symbol->GetLibSymbolRef() && symbol->GetLibSymbolRef()->HasAlternateBodyStyle();
|
||||
return symbol->GetLibSymbolRef() && symbol->GetLibSymbolRef()->IsMultiBodyStyle();
|
||||
}
|
||||
|
||||
return false;
|
||||
@ -284,21 +284,6 @@ bool SCH_SELECTION_TOOL::Init()
|
||||
return m_enteredGroup != nullptr;
|
||||
};
|
||||
|
||||
auto symbolDisplayNameIsEditable =
|
||||
[&]( const SELECTION& sel )
|
||||
{
|
||||
if ( !m_isSymbolEditor )
|
||||
return false;
|
||||
|
||||
SYMBOL_EDIT_FRAME* symbEditorFrame = dynamic_cast<SYMBOL_EDIT_FRAME*>( m_frame );
|
||||
|
||||
return symbEditorFrame
|
||||
&& symbEditorFrame->GetCurSymbol()
|
||||
&& symbEditorFrame->GetCurSymbol()->IsMulti()
|
||||
&& symbEditorFrame->IsSymbolEditable()
|
||||
&& !symbEditorFrame->IsSymbolAlias();
|
||||
};
|
||||
|
||||
auto& menu = m_menu->GetMenu();
|
||||
|
||||
// clang-format off
|
||||
@ -341,7 +326,6 @@ bool SCH_SELECTION_TOOL::Init()
|
||||
menu.AddSeparator( 400 );
|
||||
menu.AddItem( SCH_ACTIONS::symbolProperties, haveSymbol && SCH_CONDITIONS::Empty, 400 );
|
||||
menu.AddItem( SCH_ACTIONS::pinTable, haveSymbol && SCH_CONDITIONS::Empty, 400 );
|
||||
menu.AddItem( SCH_ACTIONS::setUnitDisplayName, haveSymbol && symbolDisplayNameIsEditable && SCH_CONDITIONS::Empty, 400 );
|
||||
|
||||
menu.AddSeparator( 1000 );
|
||||
m_frame->AddStandardSubMenus( *m_menu.get() );
|
||||
@ -764,14 +748,14 @@ int SCH_SELECTION_TOOL::Main( const TOOL_EVENT& aEvent )
|
||||
if( symbol )
|
||||
static_cast<SCH_EDIT_FRAME*>( m_frame )->SelectUnit( symbol, unit );
|
||||
}
|
||||
else if( *evt->GetCommandId() >= ID_POPUP_SCH_SELECT_BASE
|
||||
&& *evt->GetCommandId() <= ID_POPUP_SCH_SELECT_ALT )
|
||||
else if( *evt->GetCommandId() >= ID_POPUP_SCH_SELECT_BODY_STYLE
|
||||
&& *evt->GetCommandId() <= ID_POPUP_SCH_SELECT_BODY_STYLE_END )
|
||||
{
|
||||
SCH_SYMBOL* symbol = dynamic_cast<SCH_SYMBOL*>( m_selection.Front() );
|
||||
int bodyStyle = ( *evt->GetCommandId() - ID_POPUP_SCH_SELECT_BASE ) + 1;
|
||||
int bodyStyle = ( *evt->GetCommandId() - ID_POPUP_SCH_SELECT_BODY_STYLE ) + 1;
|
||||
|
||||
if( symbol && symbol->GetBodyStyle() != bodyStyle )
|
||||
static_cast<SCH_EDIT_FRAME*>( m_frame )->FlipBodyStyle( symbol );
|
||||
static_cast<SCH_EDIT_FRAME*>( m_frame )->SelectBodyStyle( symbol, bodyStyle );
|
||||
}
|
||||
else if( *evt->GetCommandId() >= ID_POPUP_SCH_ALT_PIN_FUNCTION
|
||||
&& *evt->GetCommandId() <= ID_POPUP_SCH_ALT_PIN_FUNCTION_END )
|
||||
|
@ -52,7 +52,7 @@ class SCH_CONDITIONS : public SELECTION_CONDITIONS
|
||||
public:
|
||||
static SELECTION_CONDITION SingleSymbol;
|
||||
static SELECTION_CONDITION SingleSymbolOrPower;
|
||||
static SELECTION_CONDITION SingleDeMorganSymbol;
|
||||
static SELECTION_CONDITION SingleMultiBodyStyleSymbol;
|
||||
static SELECTION_CONDITION SingleMultiUnitSymbol;
|
||||
static SELECTION_CONDITION SingleMultiFunctionPin;
|
||||
static SELECTION_CONDITION SingleNonExcludedMarker;
|
||||
|
@ -582,32 +582,6 @@ int SYMBOL_EDITOR_CONTROL::RenameSymbol( const TOOL_EVENT& aEvent )
|
||||
}
|
||||
|
||||
|
||||
int SYMBOL_EDITOR_CONTROL::OnDeMorgan( const TOOL_EVENT& aEvent )
|
||||
{
|
||||
int bodyStyle = aEvent.IsAction( &SCH_ACTIONS::showDeMorganStandard ) ? BODY_STYLE::BASE
|
||||
: BODY_STYLE::DEMORGAN;
|
||||
|
||||
if( m_frame->IsType( FRAME_SCH_SYMBOL_EDITOR ) )
|
||||
{
|
||||
m_toolMgr->RunAction( ACTIONS::cancelInteractive );
|
||||
m_toolMgr->RunAction( ACTIONS::selectionClear );
|
||||
|
||||
SYMBOL_EDIT_FRAME* symbolEditor = static_cast<SYMBOL_EDIT_FRAME*>( m_frame );
|
||||
symbolEditor->SetBodyStyle( bodyStyle );
|
||||
|
||||
m_toolMgr->ResetTools( TOOL_BASE::MODEL_RELOAD );
|
||||
symbolEditor->RebuildView();
|
||||
}
|
||||
else if( m_frame->IsType( FRAME_SCH_VIEWER ) )
|
||||
{
|
||||
SYMBOL_VIEWER_FRAME* symbolViewer = static_cast<SYMBOL_VIEWER_FRAME*>( m_frame );
|
||||
symbolViewer->SetUnitAndBodyStyle( symbolViewer->GetUnit(), bodyStyle );
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int SYMBOL_EDITOR_CONTROL::ToggleProperties( const TOOL_EVENT& aEvent )
|
||||
{
|
||||
if( m_frame->IsType( FRAME_SCH_SYMBOL_EDITOR ) )
|
||||
@ -923,9 +897,6 @@ void SYMBOL_EDITOR_CONTROL::setTransitions()
|
||||
Go( &SYMBOL_EDITOR_CONTROL::ExportSymbolAsSVG, SCH_ACTIONS::exportSymbolAsSVG.MakeEvent() );
|
||||
Go( &SYMBOL_EDITOR_CONTROL::AddSymbolToSchematic, SCH_ACTIONS::addSymbolToSchematic.MakeEvent() );
|
||||
|
||||
Go( &SYMBOL_EDITOR_CONTROL::OnDeMorgan, SCH_ACTIONS::showDeMorganStandard.MakeEvent() );
|
||||
Go( &SYMBOL_EDITOR_CONTROL::OnDeMorgan, SCH_ACTIONS::showDeMorganAlternate.MakeEvent() );
|
||||
|
||||
Go( &SYMBOL_EDITOR_CONTROL::ShowElectricalTypes, SCH_ACTIONS::showElectricalTypes.MakeEvent() );
|
||||
Go( &SYMBOL_EDITOR_CONTROL::ShowPinNumbers, SCH_ACTIONS::showPinNumbers.MakeEvent() );
|
||||
Go( &SYMBOL_EDITOR_CONTROL::ToggleSyncedPinsMode, SCH_ACTIONS::toggleSyncedPinsMode.MakeEvent() );
|
||||
|
@ -62,8 +62,6 @@ public:
|
||||
int ExportSymbolAsSVG( const TOOL_EVENT& aEvent );
|
||||
int AddSymbolToSchematic( const TOOL_EVENT& aEvent );
|
||||
|
||||
int OnDeMorgan( const TOOL_EVENT& aEvent );
|
||||
|
||||
int ShowElectricalTypes( const TOOL_EVENT& aEvent );
|
||||
int ShowPinNumbers( const TOOL_EVENT& aEvent );
|
||||
int ToggleProperties( const TOOL_EVENT& aEvent );
|
||||
|
@ -650,6 +650,7 @@ void SYMBOL_EDITOR_EDIT_TOOL::editSymbolProperties()
|
||||
if( dlg.ShowQuasiModal() != wxID_OK )
|
||||
return;
|
||||
|
||||
m_frame->RebuildSymbolUnitAndBodyStyleLists();
|
||||
m_frame->OnModify();
|
||||
|
||||
// if m_UnitSelectionLocked has changed, set some edit options or defaults
|
||||
@ -668,17 +669,6 @@ void SYMBOL_EDITOR_EDIT_TOOL::editSymbolProperties()
|
||||
}
|
||||
}
|
||||
|
||||
void SYMBOL_EDITOR_EDIT_TOOL::handlePinDuplication( SCH_PIN* aOldPin, SCH_PIN* aNewPin,
|
||||
int& aSymbolLastPinNumber )
|
||||
{
|
||||
if( !aNewPin->GetNumber().IsEmpty() )
|
||||
{
|
||||
// when duplicating a pin in symbol editor, assigning identical pin number
|
||||
// to the old one does not makes any sense, so assign the next unassigned number to it
|
||||
aSymbolLastPinNumber++;
|
||||
aNewPin->SetNumber( wxString::Format( wxT( "%i" ), aSymbolLastPinNumber ) );
|
||||
}
|
||||
}
|
||||
|
||||
int SYMBOL_EDITOR_EDIT_TOOL::PinTable( const TOOL_EVENT& aEvent )
|
||||
{
|
||||
@ -745,45 +735,6 @@ int SYMBOL_EDITOR_EDIT_TOOL::UpdateSymbolFields( const TOOL_EVENT& aEvent )
|
||||
}
|
||||
|
||||
|
||||
int SYMBOL_EDITOR_EDIT_TOOL::SetUnitDisplayName( const TOOL_EVENT& aEvent )
|
||||
{
|
||||
LIB_SYMBOL* symbol = m_frame->GetCurSymbol();
|
||||
|
||||
if( !symbol )
|
||||
return 0;
|
||||
|
||||
int unitid = m_frame->GetUnit();
|
||||
|
||||
if( unitid == 0 )
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
wxString promptText = wxString::Format( _( "Enter display name for unit %s" ),
|
||||
LIB_SYMBOL::LetterSubReference( unitid, 'A' ) );
|
||||
wxString currentvalue;
|
||||
|
||||
if( symbol->HasUnitDisplayName( unitid ) )
|
||||
currentvalue = symbol->GetUnitDisplayName( unitid, false );
|
||||
|
||||
wxTextEntryDialog dlg( m_frame, promptText, _( "Set Unit Display Name" ), currentvalue );
|
||||
|
||||
if( dlg.ShowModal() == wxID_OK )
|
||||
{
|
||||
saveCopyInUndoList( symbol, UNDO_REDO::LIBEDIT );
|
||||
symbol->SetUnitDisplayName( unitid, dlg.GetValue() );
|
||||
m_frame->RebuildSymbolUnitsList();
|
||||
m_frame->OnModify();
|
||||
}
|
||||
else
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int SYMBOL_EDITOR_EDIT_TOOL::Undo( const TOOL_EVENT& aEvent )
|
||||
{
|
||||
SCH_SELECTION_TOOL* selTool = m_toolMgr->GetTool<SCH_SELECTION_TOOL>();
|
||||
@ -1071,6 +1022,5 @@ void SYMBOL_EDITOR_EDIT_TOOL::setTransitions()
|
||||
Go( &SYMBOL_EDITOR_EDIT_TOOL::Properties, SCH_ACTIONS::symbolProperties.MakeEvent() );
|
||||
Go( &SYMBOL_EDITOR_EDIT_TOOL::PinTable, SCH_ACTIONS::pinTable.MakeEvent() );
|
||||
Go( &SYMBOL_EDITOR_EDIT_TOOL::UpdateSymbolFields, SCH_ACTIONS::updateSymbolFields.MakeEvent() );
|
||||
Go( &SYMBOL_EDITOR_EDIT_TOOL::SetUnitDisplayName, SCH_ACTIONS::setUnitDisplayName.MakeEvent() );
|
||||
// clang-format on
|
||||
}
|
||||
|
@ -49,7 +49,6 @@ public:
|
||||
|
||||
int Properties( const TOOL_EVENT& aEvent );
|
||||
int PinTable( const TOOL_EVENT& aEvent );
|
||||
int SetUnitDisplayName( const TOOL_EVENT& aEvent );
|
||||
int UpdateSymbolFields( const TOOL_EVENT& aEvent );
|
||||
|
||||
int Undo( const TOOL_EVENT& aEvent );
|
||||
@ -70,7 +69,6 @@ private:
|
||||
void editTextBoxProperties( SCH_ITEM* aItem );
|
||||
void editFieldProperties( SCH_FIELD* aField );
|
||||
void editSymbolProperties();
|
||||
void handlePinDuplication(SCH_PIN* aOldPin, SCH_PIN* aNewPin, int &aSymbolLastPinNumber );
|
||||
|
||||
///< Set up handlers for various events.
|
||||
void setTransitions() override;
|
||||
|
@ -251,8 +251,8 @@ PANEL_SYMBOL_CHOOSER::PANEL_SYMBOL_CHOOSER( SCH_BASE_FRAME* aFrame, wxWindow* aP
|
||||
wxBoxSizer* treeSizer = new wxBoxSizer( wxVERTICAL );
|
||||
treePanel->SetSizer( treeSizer );
|
||||
|
||||
m_tree = new LIB_TREE( treePanel, m_showPower ? wxT( "power" ) : wxT( "symbols" ),
|
||||
libs, m_adapter, LIB_TREE::FLAGS::ALL_WIDGETS, m_details );
|
||||
m_tree = new LIB_TREE( treePanel, m_showPower ? wxT( "power" ) : wxT( "symbols" ), libs, m_adapter,
|
||||
LIB_TREE::FLAGS::ALL_WIDGETS, m_details );
|
||||
|
||||
treeSizer->Add( m_tree, 1, wxALL | wxEXPAND, 5 );
|
||||
treePanel->Layout();
|
||||
@ -284,17 +284,10 @@ PANEL_SYMBOL_CHOOSER::PANEL_SYMBOL_CHOOSER( SCH_BASE_FRAME* aFrame, wxWindow* aP
|
||||
aFrame->Bind( wxEVT_MENU_CLOSE, &PANEL_SYMBOL_CHOOSER::onMenuClose, this );
|
||||
|
||||
if( m_fp_sel_ctrl )
|
||||
{
|
||||
m_fp_sel_ctrl->Bind( EVT_FOOTPRINT_SELECTED, &PANEL_SYMBOL_CHOOSER::onFootprintSelected,
|
||||
this );
|
||||
}
|
||||
m_fp_sel_ctrl->Bind( EVT_FOOTPRINT_SELECTED, &PANEL_SYMBOL_CHOOSER::onFootprintSelected, this );
|
||||
|
||||
if( m_details )
|
||||
{
|
||||
m_details->Connect( wxEVT_CHAR_HOOK,
|
||||
wxKeyEventHandler( PANEL_SYMBOL_CHOOSER::OnDetailsCharHook ),
|
||||
nullptr, this );
|
||||
}
|
||||
m_details->Bind( wxEVT_CHAR_HOOK, &PANEL_SYMBOL_CHOOSER::OnDetailsCharHook, this );
|
||||
|
||||
// Open the user's previously opened libraries on timer expiration.
|
||||
// This is done on a timer because we need a gross hack to keep GTK from garbling the
|
||||
@ -323,17 +316,10 @@ PANEL_SYMBOL_CHOOSER::~PANEL_SYMBOL_CHOOSER()
|
||||
g_symbolSearchString = m_tree->GetSearchString();
|
||||
|
||||
if( m_fp_sel_ctrl )
|
||||
{
|
||||
m_fp_sel_ctrl->Unbind( EVT_FOOTPRINT_SELECTED, &PANEL_SYMBOL_CHOOSER::onFootprintSelected,
|
||||
this );
|
||||
}
|
||||
m_fp_sel_ctrl->Unbind( EVT_FOOTPRINT_SELECTED, &PANEL_SYMBOL_CHOOSER::onFootprintSelected, this );
|
||||
|
||||
if( m_details )
|
||||
{
|
||||
m_details->Disconnect( wxEVT_CHAR_HOOK,
|
||||
wxKeyEventHandler( PANEL_SYMBOL_CHOOSER::OnDetailsCharHook ),
|
||||
nullptr, this );
|
||||
}
|
||||
m_details->Unbind( wxEVT_CHAR_HOOK, &PANEL_SYMBOL_CHOOSER::OnDetailsCharHook, this );
|
||||
|
||||
if( EESCHEMA_SETTINGS* cfg = dynamic_cast<EESCHEMA_SETTINGS*>( Kiface().KifaceSettings() ) )
|
||||
{
|
||||
|
@ -87,7 +87,7 @@ SYMBOL_DIFF_WIDGET::~SYMBOL_DIFF_WIDGET()
|
||||
|
||||
|
||||
void SYMBOL_DIFF_WIDGET::DisplayDiff( LIB_SYMBOL* aSchSymbol, LIB_SYMBOL* aLibSymbol, int aUnit,
|
||||
int aConvert )
|
||||
int aBodyStyle )
|
||||
{
|
||||
KIGFX::VIEW* view = m_preview->GetView();
|
||||
|
||||
@ -111,14 +111,13 @@ void SYMBOL_DIFF_WIDGET::DisplayDiff( LIB_SYMBOL* aSchSymbol, LIB_SYMBOL* aLibSy
|
||||
// For symbols having a De Morgan body style, use the first style
|
||||
auto settings = static_cast<SCH_RENDER_SETTINGS*>( view->GetPainter()->GetSettings() );
|
||||
|
||||
settings->m_ShowUnit = ( m_previewItem->IsMulti() && !aUnit ) ? 1 : aUnit;
|
||||
settings->m_ShowBodyStyle = ( m_previewItem->HasAlternateBodyStyle() && !aConvert ) ? 1 : aConvert;
|
||||
settings->m_ShowUnit = ( m_previewItem->IsMultiUnit() && !aUnit ) ? 1 : aUnit;
|
||||
settings->m_ShowBodyStyle = ( m_previewItem->IsMultiBodyStyle() && !aBodyStyle ) ? 1 : aBodyStyle;
|
||||
|
||||
view->Add( m_previewItem );
|
||||
|
||||
// Get the symbol size, in internal units
|
||||
m_itemBBox = m_previewItem->GetUnitBoundingBox( settings->m_ShowUnit,
|
||||
settings->m_ShowBodyStyle );
|
||||
m_itemBBox = m_previewItem->GetUnitBoundingBox( settings->m_ShowUnit, settings->m_ShowBodyStyle );
|
||||
|
||||
// Calculate the draw scale to fit the drawing area
|
||||
fitOnDrawArea();
|
||||
|
@ -45,7 +45,7 @@ public:
|
||||
/**
|
||||
* Set the currently displayed symbol.
|
||||
*/
|
||||
void DisplayDiff( LIB_SYMBOL* aSchSymbol, LIB_SYMBOL* aLibSymbol, int aUnit, int aConvert );
|
||||
void DisplayDiff( LIB_SYMBOL* aSchSymbol, LIB_SYMBOL* aLibSymbol, int aUnit, int aBodyStyle );
|
||||
|
||||
/**
|
||||
* Toggle between full-A and full-B display.
|
||||
|
@ -173,8 +173,8 @@ void SYMBOL_PREVIEW_WIDGET::fitOnDrawArea()
|
||||
view->SetScale( 1.0 );
|
||||
VECTOR2D clientSize = view->ToWorld( ToVECTOR2D( m_preview->GetClientSize() ), false );
|
||||
// Calculate the draw scale to fit the drawing area
|
||||
double scale = std::min( fabs( clientSize.x / m_itemBBox.GetWidth() ),
|
||||
fabs( clientSize.y / m_itemBBox.GetHeight() ) );
|
||||
double scale = std::min( fabs( clientSize.x / (double) m_itemBBox.GetWidth() ),
|
||||
fabs( clientSize.y / (double) m_itemBBox.GetHeight() ) );
|
||||
|
||||
// Above calculation will yield an exact fit; add a bit of whitespace around symbol
|
||||
scale /= 1.2;
|
||||
@ -217,13 +217,11 @@ void SYMBOL_PREVIEW_WIDGET::DisplaySymbol( const LIB_ID& aSymbolID, int aUnit, i
|
||||
// This will flatten derived parts so that the correct final symbol can be shown.
|
||||
m_previewItem = symbol.release();
|
||||
|
||||
// If unit isn't specified for a multi-unit part, pick the first. (Otherwise we'll
|
||||
// draw all of them.)
|
||||
m_renderSettings->m_ShowUnit = ( m_previewItem->IsMulti() && aUnit == 0 ) ? 1 : aUnit;
|
||||
// If unit isn't specified for a multi-unit part, pick the first. (Otherwise we'll draw all of them.)
|
||||
m_renderSettings->m_ShowUnit = ( m_previewItem->IsMultiUnit() && aUnit == 0 ) ? 1 : aUnit;
|
||||
|
||||
// For symbols having a De Morgan body style, use the first style
|
||||
m_renderSettings->m_ShowBodyStyle =
|
||||
( m_previewItem->HasAlternateBodyStyle() && aBodyStyle == 0 ) ? 1 : aBodyStyle;
|
||||
// For symbols having multiple body styles, use the first style.
|
||||
m_renderSettings->m_ShowBodyStyle = ( m_previewItem->IsMultiBodyStyle() && aBodyStyle == 0 ) ? 1 : aBodyStyle;
|
||||
|
||||
m_previewItem->SetPreviewUnit( m_renderSettings->m_ShowUnit );
|
||||
m_previewItem->SetPreviewBodyStyle( m_renderSettings->m_ShowBodyStyle );
|
||||
@ -275,12 +273,10 @@ void SYMBOL_PREVIEW_WIDGET::DisplayPart( LIB_SYMBOL* aSymbol, int aUnit, int aBo
|
||||
|
||||
// For symbols having a De Morgan body style, use the first style
|
||||
|
||||
// If unit isn't specified for a multi-unit part, pick the first. (Otherwise we'll
|
||||
// draw all of them.)
|
||||
m_renderSettings->m_ShowUnit = ( m_previewItem->IsMulti() && aUnit == 0 ) ? 1 : aUnit;
|
||||
// If unit isn't specified for a multi-unit part, pick the first. (Otherwise we'll draw all of them.)
|
||||
m_renderSettings->m_ShowUnit = ( m_previewItem->IsMultiUnit() && aUnit == 0 ) ? 1 : aUnit;
|
||||
|
||||
m_renderSettings->m_ShowBodyStyle =
|
||||
( m_previewItem->HasAlternateBodyStyle() && aBodyStyle == 0 ) ? 1 : aBodyStyle;
|
||||
m_renderSettings->m_ShowBodyStyle = ( m_previewItem->IsMultiBodyStyle() && aBodyStyle == 0 ) ? 1 : aBodyStyle;
|
||||
|
||||
m_previewItem->SetPreviewUnit( m_renderSettings->m_ShowUnit );
|
||||
m_previewItem->SetPreviewBodyStyle( m_renderSettings->m_ShowBodyStyle );
|
||||
|
@ -467,6 +467,7 @@ public:
|
||||
static ACTION_TOOLBAR_CONTROL zoomSelect;
|
||||
static ACTION_TOOLBAR_CONTROL ipcScripting;
|
||||
static ACTION_TOOLBAR_CONTROL unitSelector;
|
||||
static ACTION_TOOLBAR_CONTROL bodyStyleSelector;
|
||||
static ACTION_TOOLBAR_CONTROL layerSelector;
|
||||
static ACTION_TOOLBAR_CONTROL overrideLocks;
|
||||
};
|
||||
|
@ -72,10 +72,10 @@ BOOST_AUTO_TEST_CASE( DefaultProperties )
|
||||
|
||||
// no sub units
|
||||
BOOST_CHECK_EQUAL( m_part_no_data.GetUnitCount(), 1 );
|
||||
BOOST_CHECK_EQUAL( m_part_no_data.IsMulti(), false );
|
||||
BOOST_CHECK_EQUAL( m_part_no_data.IsMultiUnit(), false );
|
||||
|
||||
// no conversion
|
||||
BOOST_CHECK_EQUAL( m_part_no_data.HasAlternateBodyStyle(), false );
|
||||
// single body style
|
||||
BOOST_CHECK_EQUAL( m_part_no_data.HasDeMorganBodyStyles(), false );
|
||||
}
|
||||
|
||||
|
||||
@ -383,12 +383,12 @@ BOOST_AUTO_TEST_CASE( Compare )
|
||||
testPart.SetLibId( id );
|
||||
|
||||
// Unit count comparison tests.
|
||||
testPart.SetUnitCount( 2 );
|
||||
testPart.SetUnitCount( 2, true );
|
||||
BOOST_CHECK( m_part_no_data.Compare( testPart ) < 0 );
|
||||
testPart.SetUnitCount( 1 );
|
||||
m_part_no_data.SetUnitCount( 2 );
|
||||
testPart.SetUnitCount( 1, true );
|
||||
m_part_no_data.SetUnitCount( 2, true );
|
||||
BOOST_CHECK( m_part_no_data.Compare( testPart ) > 0 );
|
||||
m_part_no_data.SetUnitCount( 1 );
|
||||
m_part_no_data.SetUnitCount( 1, true );
|
||||
|
||||
// Options flag comparison tests.
|
||||
testPart.SetGlobalPower();
|
||||
@ -534,7 +534,7 @@ BOOST_AUTO_TEST_CASE( GetUnitItems )
|
||||
// Two unique units with pin 1 assigned to unit 1 and body style 1 and pin 2 assigned to
|
||||
// unit 2 and body style 1.
|
||||
SCH_PIN* pin2 = new SCH_PIN( &m_part_no_data );
|
||||
m_part_no_data.SetUnitCount( 2 );
|
||||
m_part_no_data.SetUnitCount( 2, true );
|
||||
pin2->SetUnit( 2 );
|
||||
pin2->SetBodyStyle( 2 );
|
||||
pin2->SetNumber( "4" );
|
||||
@ -587,8 +587,7 @@ BOOST_AUTO_TEST_CASE( Inheritance )
|
||||
BOOST_CHECK( child->IsDerived() );
|
||||
BOOST_CHECK_EQUAL( child->GetInheritanceDepth(), 1 );
|
||||
|
||||
std::unique_ptr<LIB_SYMBOL> grandChild = std::make_unique<LIB_SYMBOL>( "grandchild",
|
||||
child.get() );
|
||||
std::unique_ptr<LIB_SYMBOL> grandChild = std::make_unique<LIB_SYMBOL>( "grandchild", child.get() );
|
||||
BOOST_CHECK( grandChild->IsDerived() );
|
||||
BOOST_CHECK_EQUAL( grandChild->GetInheritanceDepth(), 2 );
|
||||
|
||||
@ -607,9 +606,9 @@ BOOST_AUTO_TEST_CASE( Inheritance )
|
||||
BOOST_CHECK_EQUAL( child->SharedPtr().use_count(), 3 );
|
||||
|
||||
BOOST_CHECK_EQUAL( child->GetUnitCount(), 1 );
|
||||
parent->SetUnitCount( 4 );
|
||||
parent->SetUnitCount( 4, true );
|
||||
BOOST_CHECK_EQUAL( child->GetUnitCount(), 4 );
|
||||
parent->SetUnitCount( 1 );
|
||||
parent->SetUnitCount( 1, true );
|
||||
|
||||
parent->GetField( FIELD_T::DATASHEET )->SetText( "https://kicad/resistors.pdf" );
|
||||
ref->GetField( FIELD_T::DATASHEET )->SetText( "https://kicad/resistors.pdf" );
|
||||
|
Loading…
x
Reference in New Issue
Block a user