1238 lines
41 KiB
C++
1238 lines
41 KiB
C++
/**************************************************************/
|
|
/* librairy editor: edition of component general properties */
|
|
/**************************************************************/
|
|
|
|
#include "fctsys.h"
|
|
#include "gr_basic.h"
|
|
|
|
#include "common.h"
|
|
#include "program.h"
|
|
#include "libcmp.h"
|
|
#include "general.h"
|
|
|
|
#include "protos.h"
|
|
|
|
#include "wx/spinctrl.h"
|
|
|
|
|
|
/* Routines locales */
|
|
|
|
/* Variables locales */
|
|
|
|
extern int CurrentUnit;
|
|
|
|
/* Classe de la frame des propriétés d'un composant en librairie */
|
|
|
|
enum id_libedit {
|
|
ID_LIBEDIT_NOTEBOOK = 3200,
|
|
ID_PANEL_BASIC,
|
|
ID_PANEL_ALIAS,
|
|
ID_PANEL_REFERENCE,
|
|
ID_PANEL_VALUE,
|
|
ID_PANEL_FOOTPRINT,
|
|
ID_PANEL_SUBSCHEMATIC,
|
|
ID_PANEL_FIELD1,
|
|
ID_PANEL_FIELD2,
|
|
ID_PANEL_FIELD3,
|
|
ID_PANEL_FIELD4,
|
|
ID_PANEL_FIELD5,
|
|
ID_PANEL_FIELD6,
|
|
ID_PANEL_FIELD7,
|
|
ID_PANEL_FIELD8,
|
|
ID_CLOSE_PART_PROPERTIES,
|
|
ID_ACCEPT_PART_PROPERTIES,
|
|
ID_COPY_DOC_TO_ALIAS,
|
|
ID_BROWSE_DOC_FILES,
|
|
ID_ADD_ALIAS,
|
|
ID_DELETE_ONE_ALIAS,
|
|
ID_DELETE_ALL_ALIAS
|
|
};
|
|
|
|
|
|
/************************************************/
|
|
class WinEDA_PartPropertiesFrame : public wxDialog
|
|
/************************************************/
|
|
|
|
/* Cette classe genere une fenetre type NoteBook, pour l'edition des propriétés
|
|
* d'un composant le librairie.
|
|
* On peut éditer:
|
|
* Texte dimensions et justification de tous les champs (Ref, Val, et autres champs)
|
|
* Documentation et mots clefs
|
|
* Nombre de part par boitier
|
|
* et autres propriérés générales
|
|
*/
|
|
{
|
|
private:
|
|
|
|
WinEDA_LibeditFrame* m_Parent;
|
|
wxNotebook* m_NoteBook;
|
|
wxListBox* m_PartAliasList;
|
|
wxPanel* m_PanelBasic;
|
|
wxPanel* m_PanelAlias;
|
|
wxPanel* m_PanelDoc;
|
|
wxPanel* PanelField[NUMBER_OF_FIELDS];
|
|
|
|
wxCheckBox* AsConvertButt;
|
|
|
|
wxCheckBox* ShowFieldText[NUMBER_OF_FIELDS];
|
|
wxCheckBox* VorientFieldText[NUMBER_OF_FIELDS];
|
|
wxCheckBox* ShowPinNumButt;
|
|
wxCheckBox* ShowPinNameButt;
|
|
wxCheckBox* m_PinsNameInsideButt;
|
|
wxSpinCtrl* SelNumberOfUnits;
|
|
wxSpinCtrl* m_SetSkew;
|
|
wxCheckBox* m_OptionPower;
|
|
wxCheckBox* m_OptionPartsLocked;
|
|
|
|
WinEDA_GraphicTextCtrl* FieldTextCtrl[NUMBER_OF_FIELDS];
|
|
WinEDA_PositionCtrl* FieldPosition[NUMBER_OF_FIELDS];
|
|
int FieldFlags[NUMBER_OF_FIELDS];
|
|
int FieldOrient[NUMBER_OF_FIELDS];
|
|
wxRadioBox* FieldHJustify[NUMBER_OF_FIELDS];
|
|
wxRadioBox* FieldVJustify[NUMBER_OF_FIELDS];
|
|
WinEDA_EnterText* m_Doc;
|
|
WinEDA_EnterText* m_Docfile;
|
|
WinEDA_EnterText* m_Keywords;
|
|
bool m_RecreateToolbar;
|
|
int m_AliasLocation;
|
|
|
|
|
|
public:
|
|
|
|
// Constructor and destructor
|
|
WinEDA_PartPropertiesFrame( WinEDA_LibeditFrame * parent, wxPoint & pos );
|
|
~WinEDA_PartPropertiesFrame()
|
|
{
|
|
};
|
|
|
|
private:
|
|
void BuildPanelBasic();
|
|
void BuildPanelDoc();
|
|
void BuildPanelAlias();
|
|
void BuildPanelEditField( int fieldId );
|
|
void PartPropertiesAccept( wxCommandEvent& event );
|
|
void OnQuit( wxCommandEvent& event );
|
|
void DeleteAllAliasOfPart( wxCommandEvent& event );
|
|
void DeleteAliasOfPart( wxCommandEvent& event );
|
|
void AddAliasOfPart( wxCommandEvent& event );
|
|
bool ChangeNbUnitsPerPackage( int newUnit );
|
|
bool SetUnsetConvert();
|
|
void CopyDocToAlias( wxCommandEvent& event );
|
|
void BrowseAndSelectDocFile( wxCommandEvent& event );
|
|
|
|
DECLARE_EVENT_TABLE()
|
|
};
|
|
|
|
BEGIN_EVENT_TABLE( WinEDA_PartPropertiesFrame, wxDialog )
|
|
EVT_BUTTON( ID_ACCEPT_PART_PROPERTIES, WinEDA_PartPropertiesFrame::PartPropertiesAccept )
|
|
EVT_BUTTON( ID_CLOSE_PART_PROPERTIES, WinEDA_PartPropertiesFrame::OnQuit )
|
|
EVT_BUTTON( ID_ADD_ALIAS, WinEDA_PartPropertiesFrame::AddAliasOfPart )
|
|
EVT_BUTTON( ID_DELETE_ONE_ALIAS, WinEDA_PartPropertiesFrame::DeleteAliasOfPart )
|
|
EVT_BUTTON( ID_DELETE_ALL_ALIAS, WinEDA_PartPropertiesFrame::DeleteAllAliasOfPart )
|
|
EVT_BUTTON( ID_COPY_DOC_TO_ALIAS, WinEDA_PartPropertiesFrame::CopyDocToAlias )
|
|
EVT_BUTTON( ID_BROWSE_DOC_FILES, WinEDA_PartPropertiesFrame::BrowseAndSelectDocFile )
|
|
END_EVENT_TABLE()
|
|
|
|
/*****************************************************************/
|
|
void WinEDA_LibeditFrame::InstallLibeditFrame( const wxPoint& pos )
|
|
/*****************************************************************/
|
|
{
|
|
wxPoint fpos = pos;
|
|
|
|
WinEDA_PartPropertiesFrame* frame =
|
|
new WinEDA_PartPropertiesFrame( this, fpos );
|
|
|
|
frame->ShowModal(); frame->Destroy();
|
|
}
|
|
|
|
|
|
#define XSIZE 370
|
|
#define YSIZE 385
|
|
/**********************************************************************************/
|
|
WinEDA_PartPropertiesFrame::WinEDA_PartPropertiesFrame( WinEDA_LibeditFrame* parent,
|
|
wxPoint& framepos ) :
|
|
wxDialog( parent, -1, wxEmptyString, framepos, wxSize( XSIZE, YSIZE ),
|
|
DIALOG_STYLE )
|
|
/**********************************************************************************/
|
|
{
|
|
wxPoint pos;
|
|
wxLayoutConstraints* c;
|
|
wxString msg_text;
|
|
wxButton* Button;
|
|
int ii;
|
|
|
|
m_Parent = parent;
|
|
m_RecreateToolbar = FALSE;
|
|
SetFont( *g_DialogFont );
|
|
|
|
SetAutoLayout( TRUE );
|
|
|
|
for( ii = 0; ii < NUMBER_OF_FIELDS; ii++ )
|
|
FieldFlags[ii] = 0;
|
|
|
|
m_AliasLocation = -1;
|
|
if( CurrentLibEntry )
|
|
{
|
|
msg_text = _( "Properties for " );
|
|
if( !CurrentAliasName.IsEmpty() )
|
|
{
|
|
m_AliasLocation = LocateAlias( CurrentLibEntry->m_AliasList, CurrentAliasName );
|
|
SetTitle( msg_text + CurrentAliasName +
|
|
_( "(alias of " ) +
|
|
wxString( CurrentLibEntry->m_Name.m_Text )
|
|
+ wxT( ")" ) );
|
|
}
|
|
else
|
|
{
|
|
SetTitle( msg_text + CurrentLibEntry->m_Name.m_Text );
|
|
CurrentAliasName.Empty();
|
|
}
|
|
|
|
FieldFlags[REFERENCE] = CurrentLibEntry->m_Prefix.m_Attributs;
|
|
FieldOrient[REFERENCE] = CurrentLibEntry->m_Prefix.m_Orient;
|
|
|
|
FieldFlags[VALUE] = CurrentLibEntry->m_Name.m_Attributs;
|
|
FieldOrient[VALUE] = CurrentLibEntry->m_Name.m_Orient;
|
|
|
|
LibDrawField* Field = CurrentLibEntry->Fields;
|
|
while( Field )
|
|
{
|
|
FieldFlags[Field->m_FieldId] = Field->m_Attributs;
|
|
FieldOrient[Field->m_FieldId] = Field->m_Orient;
|
|
Field = (LibDrawField*) Field->Pnext;
|
|
}
|
|
}
|
|
else
|
|
SetTitle( _( "Lib Component Properties" ) );
|
|
|
|
m_NoteBook = new wxNotebook( this, ID_LIBEDIT_NOTEBOOK,
|
|
wxDefaultPosition, wxSize (XSIZE - 6, YSIZE - 70) );
|
|
|
|
SetFont( *g_DialogFont );
|
|
m_NoteBook->SetAutoLayout( TRUE );
|
|
c = new wxLayoutConstraints;
|
|
c->left.SameAs( this, wxLeft, 4 );
|
|
c->right.SameAs( this, wxRight, 4 );
|
|
c->top.SameAs( this, wxTop, 4 );
|
|
c->bottom.SameAs( this, wxBottom, 40 );
|
|
m_NoteBook->SetConstraints( c );
|
|
|
|
/* Creation des boutons de commande */
|
|
pos.x = 50; pos.y = YSIZE - 60;
|
|
Button = new wxButton( this, ID_CLOSE_PART_PROPERTIES,
|
|
_( "Cancel" ), pos );
|
|
|
|
Button->SetForegroundColour( *wxBLUE );
|
|
c = new wxLayoutConstraints;
|
|
c->left.SameAs( this, wxLeft, 20 );
|
|
c->height.AsIs();
|
|
c->width.AsIs();
|
|
c->bottom.SameAs( this, wxBottom, 5 );
|
|
Button->SetConstraints( c );
|
|
|
|
pos.x += Button->GetDefaultSize().x + 70;
|
|
Button = new wxButton( this, ID_ACCEPT_PART_PROPERTIES,
|
|
_( "Ok" ), pos );
|
|
|
|
Button->SetForegroundColour( *wxRED );
|
|
c = new wxLayoutConstraints;
|
|
c->right.SameAs( this, wxRight, 20 );
|
|
c->height.AsIs();
|
|
c->width.AsIs();
|
|
c->bottom.SameAs( this, wxBottom, 5 );
|
|
Button->SetConstraints( c );
|
|
|
|
// Add panel Basic
|
|
BuildPanelBasic();
|
|
m_NoteBook->AddPage( m_PanelBasic, _( "Options" ), TRUE );
|
|
|
|
|
|
// Add Panel Documentation
|
|
BuildPanelDoc();
|
|
m_NoteBook->AddPage( m_PanelDoc, _( "Doc" ), FALSE );
|
|
|
|
// Add Panel Alias List
|
|
BuildPanelAlias();
|
|
m_NoteBook->AddPage( m_PanelAlias, _( "Alias" ), FALSE );
|
|
|
|
// Add panel Fields
|
|
for( ii = 0; ii < NUMBER_OF_FIELDS; ii++ )
|
|
BuildPanelEditField( ii );
|
|
}
|
|
|
|
|
|
/*****************************************************/
|
|
void WinEDA_PartPropertiesFrame::BuildPanelAlias()
|
|
/*****************************************************/
|
|
|
|
/* create the panel for component alias list editing
|
|
*/
|
|
{
|
|
wxPoint pos;
|
|
wxButton* Button;
|
|
|
|
m_PanelAlias = new wxPanel( m_NoteBook, -1 );
|
|
|
|
m_PanelAlias->SetFont( *g_DialogFont );
|
|
wxLayoutConstraints* c = new wxLayoutConstraints;
|
|
c->left.SameAs( m_NoteBook, wxLeft );
|
|
c->right.SameAs( m_NoteBook, wxRight );
|
|
c->bottom.SameAs( m_NoteBook, wxBottom );
|
|
m_PanelAlias->SetConstraints( c );
|
|
|
|
pos.x = 200; pos.y = 70;
|
|
Button = new wxButton( m_PanelAlias, ID_ADD_ALIAS, _( "Add" ), pos );
|
|
|
|
Button->SetForegroundColour( *wxBLUE );
|
|
|
|
pos.y += Button->GetSize().y + 10;
|
|
Button = new wxButton( m_PanelAlias, ID_DELETE_ONE_ALIAS,
|
|
_( "Delete" ), pos );
|
|
|
|
Button->SetForegroundColour( *wxRED );
|
|
|
|
pos.y += Button->GetSize().y + 10;
|
|
Button = new wxButton( m_PanelAlias, ID_DELETE_ALL_ALIAS,
|
|
_( "Delete All" ), pos );
|
|
|
|
Button->SetForegroundColour( *wxRED );
|
|
if( !CurrentAliasName.IsEmpty() )
|
|
Button->Enable( FALSE );
|
|
|
|
pos.x = 5; pos.y = 30;
|
|
m_PartAliasList = new wxListBox( m_PanelAlias,
|
|
-1,
|
|
pos, wxSize( 160, 170 ),
|
|
0, NULL,
|
|
wxLB_ALWAYS_SB | wxLB_SINGLE );
|
|
|
|
wxStaticText* Msg = new wxStaticText( m_PanelAlias, -1, _( "Alias" ),
|
|
wxPoint (pos.x, pos.y - 20) );
|
|
|
|
Msg->SetForegroundColour( wxColour( 200, 0, 0 ) );
|
|
|
|
/* lecture des noms des alias */
|
|
if( CurrentLibEntry )
|
|
{
|
|
for( unsigned ii = 0; ii < CurrentLibEntry->m_AliasList.GetCount(); ii += ALIAS_NEXT )
|
|
m_PartAliasList->Append( CurrentLibEntry->m_AliasList[ii + ALIAS_NAME] );
|
|
}
|
|
}
|
|
|
|
|
|
/*****************************************************/
|
|
void WinEDA_PartPropertiesFrame::BuildPanelDoc()
|
|
/*****************************************************/
|
|
|
|
/* create the panel for component doc editing
|
|
*/
|
|
{
|
|
wxPoint pos;
|
|
wxButton* Button;
|
|
wxString msg_text;
|
|
|
|
m_PanelDoc = new wxPanel( m_NoteBook, -1 );
|
|
|
|
m_PanelDoc->SetFont( *g_DialogFont );
|
|
wxLayoutConstraints* c = new wxLayoutConstraints;
|
|
c->left.SameAs( m_NoteBook, wxLeft );
|
|
c->right.SameAs( m_NoteBook, wxRight );
|
|
c->bottom.SameAs( m_NoteBook, wxBottom );
|
|
m_PanelDoc->SetConstraints( c );
|
|
|
|
pos.x = 5; pos.y = 15;
|
|
|
|
if( CurrentLibEntry )
|
|
{
|
|
msg_text = _( "Properties for " );
|
|
if( !CurrentAliasName.IsEmpty() )
|
|
{
|
|
msg_text += _( "alias " );
|
|
msg_text += CurrentAliasName;
|
|
}
|
|
else
|
|
{
|
|
msg_text += CurrentLibEntry->m_Name.m_Text;
|
|
}
|
|
wxStaticText* text = new wxStaticText( m_PanelDoc, -1, msg_text, pos );
|
|
|
|
text->SetForegroundColour( *wxBLUE );
|
|
}
|
|
|
|
pos.y += 30;
|
|
if( m_AliasLocation >= 0 )
|
|
msg_text = CurrentLibEntry->m_AliasList[m_AliasLocation + ALIAS_DOC];
|
|
else
|
|
{
|
|
if( CurrentLibEntry && CurrentLibEntry->m_Doc )
|
|
msg_text = CurrentLibEntry->m_Doc;
|
|
}
|
|
m_Doc = new WinEDA_EnterText( m_PanelDoc,
|
|
_( "Doc:" ), msg_text,
|
|
pos, wxSize( 285, -1 ) );
|
|
|
|
pos.y += 40;
|
|
msg_text.Empty();
|
|
if( m_AliasLocation >= 0 )
|
|
msg_text = CurrentLibEntry->m_AliasList[m_AliasLocation + ALIAS_KEYWORD];
|
|
else
|
|
{
|
|
if( CurrentLibEntry )
|
|
msg_text = CurrentLibEntry->m_KeyWord;
|
|
}
|
|
m_Keywords = new WinEDA_EnterText( m_PanelDoc,
|
|
_( "Keywords:" ), msg_text,
|
|
pos, wxSize( 285, -1 ) );
|
|
|
|
pos.y += 40;
|
|
msg_text.Empty();
|
|
if( m_AliasLocation >= 0 )
|
|
msg_text = CurrentLibEntry->m_AliasList[m_AliasLocation + ALIAS_DOC_FILENAME];
|
|
else
|
|
{
|
|
if( CurrentLibEntry )
|
|
msg_text = CurrentLibEntry->m_DocFile;
|
|
}
|
|
m_Docfile = new WinEDA_EnterText( m_PanelDoc,
|
|
_( "DocFileName:" ), msg_text,
|
|
pos, wxSize( 285, -1 ) );
|
|
|
|
pos.y += 40;
|
|
Button = new wxButton( m_PanelDoc, ID_COPY_DOC_TO_ALIAS,
|
|
_( "Copy Doc" ), pos );
|
|
|
|
Button->SetForegroundColour( *wxRED );
|
|
if( m_AliasLocation < 0 )
|
|
Button->Enable( FALSE );
|
|
|
|
Button = new wxButton( m_PanelDoc, ID_BROWSE_DOC_FILES,
|
|
_( "Browse DocFiles" ), wxPoint (pos.x + 140, pos.y) );
|
|
|
|
Button->SetForegroundColour( *wxBLUE );
|
|
}
|
|
|
|
|
|
/*****************************************************/
|
|
void WinEDA_PartPropertiesFrame::BuildPanelBasic()
|
|
/*****************************************************/
|
|
|
|
/* create the basic panel for component properties editing
|
|
*/
|
|
{
|
|
wxPoint pos;
|
|
|
|
m_PanelBasic = new wxPanel( m_NoteBook, ID_PANEL_BASIC );
|
|
|
|
m_PanelBasic->SetFont( *g_DialogFont );
|
|
wxLayoutConstraints* c = new wxLayoutConstraints;
|
|
c->left.SameAs( m_NoteBook, wxLeft );
|
|
c->right.SameAs( m_NoteBook, wxRight );
|
|
c->bottom.SameAs( m_NoteBook, wxBottom );
|
|
m_PanelBasic->SetConstraints( c );
|
|
|
|
pos.x = 5; pos.y = 25;
|
|
new wxStaticBox( m_PanelBasic, -1, _( "General :" ), pos, wxSize( 250, 120 ) );
|
|
|
|
pos.x = 10; pos.y += 22;
|
|
AsConvertButt = new wxCheckBox( m_PanelBasic, -1, _( "As Convert" ), pos );
|
|
|
|
if( g_AsDeMorgan )
|
|
AsConvertButt->SetValue( TRUE );
|
|
|
|
pos.y += 20;
|
|
ShowPinNumButt = new wxCheckBox( m_PanelBasic, -1, _( "Show Pin Num" ), pos );
|
|
|
|
if( CurrentLibEntry )
|
|
{
|
|
if( CurrentLibEntry->m_DrawPinNum )
|
|
ShowPinNumButt->SetValue( TRUE );
|
|
}
|
|
else
|
|
ShowPinNumButt->SetValue( TRUE );
|
|
|
|
pos.y += 20;
|
|
ShowPinNameButt = new wxCheckBox( m_PanelBasic, -1, _( "Show Pin Name" ), pos );
|
|
|
|
if( CurrentLibEntry )
|
|
{
|
|
if( CurrentLibEntry->m_DrawPinName )
|
|
ShowPinNameButt->SetValue( TRUE );
|
|
}
|
|
else
|
|
ShowPinNameButt->SetValue( TRUE );
|
|
|
|
pos.y += 20;
|
|
m_PinsNameInsideButt = new wxCheckBox( m_PanelBasic, -1, _( "Pin Name Inside" ), pos );
|
|
|
|
if( CurrentLibEntry )
|
|
{
|
|
if( CurrentLibEntry->m_TextInside )
|
|
m_PinsNameInsideButt->SetValue( TRUE );
|
|
}
|
|
else
|
|
m_PinsNameInsideButt->SetValue( TRUE );
|
|
|
|
pos.y += 40;
|
|
new wxStaticText( m_PanelBasic, -1, _( "Number of Units:" ), pos );
|
|
|
|
pos.y += 15;
|
|
wxString number;
|
|
if( CurrentLibEntry )
|
|
number.Printf( wxT( "%d" ), CurrentLibEntry->m_UnitCount );
|
|
else
|
|
number = wxT( "1" );
|
|
SelNumberOfUnits = new wxSpinCtrl( m_PanelBasic, -1, number, pos,
|
|
wxDefaultSize, wxSP_ARROW_KEYS | wxSP_WRAP,
|
|
1, 16 );
|
|
|
|
pos.y -= 15; pos.x += 180;
|
|
new wxStaticText( m_PanelBasic, -1, _( "Skew:" ), pos );
|
|
|
|
pos.y += 15;
|
|
if( CurrentLibEntry && CurrentLibEntry->m_TextInside )
|
|
number.Printf( wxT( "%d" ), CurrentLibEntry->m_TextInside );
|
|
else
|
|
number = wxT( "40" );
|
|
m_SetSkew = new wxSpinCtrl( m_PanelBasic, -1, number, pos,
|
|
wxDefaultSize, wxSP_ARROW_KEYS | wxSP_WRAP,
|
|
1, 100 );
|
|
|
|
pos.x = 5; pos.y += 40;
|
|
m_OptionPower = new wxCheckBox( m_PanelBasic, -1, _( "Power Symbol" ), pos );
|
|
|
|
if( CurrentLibEntry )
|
|
{
|
|
if( CurrentLibEntry->m_Options == ENTRY_POWER )
|
|
m_OptionPower->SetValue( TRUE );
|
|
}
|
|
|
|
pos.y = m_OptionPower->GetRect().GetBottom() + 10;
|
|
m_OptionPartsLocked = new wxCheckBox( m_PanelBasic, -1, _( "Parts are locked" ), pos );
|
|
|
|
if( CurrentLibEntry )
|
|
{
|
|
if( CurrentLibEntry->m_UnitSelectionLocked )
|
|
m_OptionPartsLocked->SetValue( TRUE );
|
|
}
|
|
if( number == wxT( "1" ) )
|
|
m_OptionPartsLocked->Enable( FALSE );
|
|
}
|
|
|
|
|
|
/****************************************************************/
|
|
void WinEDA_PartPropertiesFrame::BuildPanelEditField( int fieldId )
|
|
/****************************************************************/
|
|
{
|
|
wxPoint pos;
|
|
int xx, yy;
|
|
LibDrawField* Field;
|
|
wxString Hjustify_list[] =
|
|
{ _( "Left justify" ), _( "Center" ), _( "Right justify" ) };
|
|
wxString Vjustify_list[] =
|
|
{ _( "Bottom justify" ), _( "Center" ), _( "Top justify" ) };
|
|
int ii = fieldId;
|
|
|
|
PanelField[ii] = new wxPanel( m_NoteBook, ID_PANEL_REFERENCE + ii );
|
|
|
|
PanelField[ii]->SetFont( *g_DialogFont );
|
|
wxLayoutConstraints* c = new wxLayoutConstraints;
|
|
c->left.SameAs( m_NoteBook, wxLeft );
|
|
c->right.SameAs( m_NoteBook, wxRight );
|
|
c->bottom.SameAs( m_NoteBook, wxBottom );
|
|
PanelField[ii]->SetConstraints( c );
|
|
m_NoteBook->AddPage( PanelField[ii], DrawPartStruct::ReturnFieldName( ii ), FALSE );
|
|
|
|
pos.x = 10; pos.y = 10;
|
|
ShowFieldText[ii] = new wxCheckBox( PanelField[ii], -1,
|
|
_( "Show Text" ), pos );
|
|
|
|
if( (FieldFlags[ii] & TEXT_NO_VISIBLE ) == 0 )
|
|
ShowFieldText[ii]->SetValue( TRUE );
|
|
|
|
ShowFieldText[ii]->GetSize( &xx, &yy );
|
|
pos.y += yy + 5;
|
|
VorientFieldText[ii] = new wxCheckBox( PanelField[ii], -1,
|
|
_( "Vertical" ), pos );
|
|
|
|
if( FieldOrient[ii] )
|
|
VorientFieldText[ii]->SetValue( TRUE );
|
|
|
|
pos.x = 150; pos.y = 5;
|
|
FieldHJustify[ii] = new wxRadioBox( PanelField[ii], -1,
|
|
_( "Hor Justify" ), pos, wxDefaultSize,
|
|
3, Hjustify_list, 1, wxRA_SPECIFY_COLS );
|
|
|
|
FieldHJustify[ii]->GetSize( &xx, &yy );
|
|
FieldHJustify[ii]->SetSelection( 1 );
|
|
|
|
pos.y += yy + 5;
|
|
FieldVJustify[ii] = new wxRadioBox( PanelField[ii], -1,
|
|
_( "Vert Justify" ), pos, wxDefaultSize,
|
|
3, Vjustify_list, 1, wxRA_SPECIFY_COLS );
|
|
|
|
FieldVJustify[ii]->SetSelection( 1 );
|
|
|
|
wxPoint txtpos;
|
|
pos.x = 10; pos.y = 70;
|
|
#define POSY_OFFSET 70
|
|
|
|
switch( ii )
|
|
{
|
|
case REFERENCE:
|
|
if( CurrentLibEntry )
|
|
{
|
|
Field = &CurrentLibEntry->m_Prefix;
|
|
txtpos = Field->m_Pos;
|
|
if( Field->m_HJustify == GR_TEXT_HJUSTIFY_LEFT )
|
|
FieldHJustify[ii]->SetSelection( 0 );
|
|
else if( Field->m_HJustify == GR_TEXT_HJUSTIFY_RIGHT )
|
|
FieldHJustify[ii]->SetSelection( 2 );
|
|
if( Field->m_VJustify == GR_TEXT_VJUSTIFY_BOTTOM )
|
|
FieldVJustify[ii]->SetSelection( 0 );
|
|
else if( Field->m_VJustify == GR_TEXT_VJUSTIFY_TOP )
|
|
FieldVJustify[ii]->SetSelection( 2 );
|
|
}
|
|
else
|
|
txtpos = wxPoint( 0, 0 );
|
|
FieldPosition[ii] = new WinEDA_PositionCtrl( PanelField[ii],
|
|
_( "Pos" ), txtpos,
|
|
g_UnitMetric, pos );
|
|
|
|
FieldTextCtrl[ii] = new WinEDA_GraphicTextCtrl(
|
|
PanelField[ii],
|
|
DrawPartStruct::ReturnFieldName (ii),
|
|
CurrentLibEntry ?
|
|
CurrentLibEntry->m_Prefix.m_Text.GetData ()
|
|
: wxT(
|
|
"U" ),
|
|
CurrentLibEntry ? CurrentLibEntry->
|
|
m_Prefix.m_Size.x : DEFAULT_TEXT_SIZE,
|
|
g_UnitMetric,
|
|
wxPoint (pos.x, pos.y +
|
|
FieldPosition[ii]->GetDimension ().y + POSY_OFFSET),
|
|
200,
|
|
TRUE );
|
|
|
|
break;
|
|
|
|
case VALUE:
|
|
if( CurrentLibEntry )
|
|
{
|
|
Field = &CurrentLibEntry->m_Name;
|
|
txtpos = Field->m_Pos;
|
|
if( Field->m_HJustify == GR_TEXT_HJUSTIFY_LEFT )
|
|
FieldHJustify[ii]->SetSelection( 0 );
|
|
else if( Field->m_HJustify == GR_TEXT_HJUSTIFY_RIGHT )
|
|
FieldHJustify[ii]->SetSelection( 2 );
|
|
if( Field->m_VJustify == GR_TEXT_VJUSTIFY_BOTTOM )
|
|
FieldVJustify[ii]->SetSelection( 0 );
|
|
else if( Field->m_VJustify == GR_TEXT_VJUSTIFY_TOP )
|
|
FieldVJustify[ii]->SetSelection( 2 );
|
|
}
|
|
else
|
|
txtpos = wxPoint( 0, 0 );
|
|
FieldPosition[ii] = new WinEDA_PositionCtrl( PanelField[ii],
|
|
_( "Pos" ), txtpos,
|
|
g_UnitMetric, pos );
|
|
|
|
FieldTextCtrl[ii] = new WinEDA_GraphicTextCtrl(
|
|
PanelField[ii],
|
|
DrawPartStruct::ReturnFieldName (ii),
|
|
CurrentLibEntry ? CurrentLibEntry->m_Name.
|
|
m_Text.GetData () : NULL,
|
|
CurrentLibEntry ? CurrentLibEntry->m_Name.
|
|
m_Size.x : DEFAULT_TEXT_SIZE,
|
|
g_UnitMetric,
|
|
wxPoint (pos.x, pos.y +
|
|
FieldPosition[ii]->GetDimension ().y + POSY_OFFSET),
|
|
200,
|
|
TRUE );
|
|
|
|
break;
|
|
|
|
default:
|
|
int fsize;
|
|
wxString ftext;
|
|
wxPoint fpos;
|
|
fsize = DEFAULT_TEXT_SIZE;;
|
|
Field = NULL;
|
|
fpos = wxPoint( 0, 0 );
|
|
|
|
//recherche du Field de FieldId correspondant, s'il existe
|
|
if( CurrentLibEntry )
|
|
{
|
|
Field = CurrentLibEntry->Fields;
|
|
while( Field )
|
|
{
|
|
if( Field->m_FieldId == ii )
|
|
{
|
|
fsize = Field->m_Size.x;
|
|
ftext = Field->m_Text;
|
|
fpos = Field->m_Pos;
|
|
if( Field->m_HJustify == GR_TEXT_HJUSTIFY_LEFT )
|
|
FieldHJustify[ii]->SetSelection( 0 );
|
|
else if( Field->m_HJustify == GR_TEXT_HJUSTIFY_RIGHT )
|
|
FieldHJustify[ii]->SetSelection( 2 );
|
|
if( Field->m_VJustify == GR_TEXT_VJUSTIFY_BOTTOM )
|
|
FieldVJustify[ii]->SetSelection( 0 );
|
|
else if( Field->m_VJustify == GR_TEXT_VJUSTIFY_TOP )
|
|
FieldVJustify[ii]->SetSelection( 2 );
|
|
break;
|
|
}
|
|
Field = (LibDrawField*) Field->Pnext;
|
|
}
|
|
}
|
|
|
|
FieldPosition[ii] = new WinEDA_PositionCtrl( PanelField[ii],
|
|
_( "Pos" ), fpos,
|
|
g_UnitMetric, pos );
|
|
|
|
FieldTextCtrl[ii] = new WinEDA_GraphicTextCtrl(
|
|
PanelField[ii],
|
|
DrawPartStruct::ReturnFieldName (ii),
|
|
ftext,
|
|
fsize,
|
|
g_UnitMetric,
|
|
wxPoint (pos.x, pos.y +
|
|
FieldPosition[ii]->GetDimension ().y + POSY_OFFSET),
|
|
200,
|
|
TRUE );
|
|
|
|
break;
|
|
}
|
|
}
|
|
|
|
|
|
/************************************************************************/
|
|
void WinEDA_PartPropertiesFrame::OnQuit( wxCommandEvent& WXUNUSED (event) )
|
|
/************************************************************************/
|
|
{
|
|
// true is to force the frame to close
|
|
Close( true );
|
|
}
|
|
|
|
|
|
/**************************************************************************/
|
|
void WinEDA_PartPropertiesFrame::PartPropertiesAccept( wxCommandEvent& event )
|
|
/**************************************************************************/
|
|
|
|
/* Met a jour les differents parametres pour le composant en cours d'édition
|
|
*/
|
|
{
|
|
int ii, jj;
|
|
int hjustify[3] = {
|
|
GR_TEXT_HJUSTIFY_LEFT, GR_TEXT_HJUSTIFY_CENTER,
|
|
GR_TEXT_HJUSTIFY_RIGHT
|
|
};
|
|
int vjustify[3] = {
|
|
GR_TEXT_VJUSTIFY_BOTTOM, GR_TEXT_VJUSTIFY_CENTER,
|
|
GR_TEXT_VJUSTIFY_TOP
|
|
};
|
|
|
|
if( CurrentLibEntry == NULL )
|
|
{
|
|
Close(); return;
|
|
}
|
|
|
|
m_Parent->m_CurrentScreen->SetModify();
|
|
m_Parent->m_CurrentScreen->SetRefreshReq();
|
|
m_Parent->SaveCopyInUndoList();
|
|
|
|
/* A new name could be entered in VALUE field.
|
|
* Must not be an existing alias name in alias list box */
|
|
jj = m_PartAliasList->GetCount();
|
|
wxString newvalue = FieldTextCtrl[VALUE]->GetText();
|
|
for( ii = 0; ii < jj; ii++ )
|
|
{
|
|
if( newvalue.CmpNoCase( m_PartAliasList->GetString( ii ).GetData() ) == 0 )
|
|
{
|
|
wxString msg;
|
|
msg.Printf( wxT( "Alias %s exists!" ), newvalue.GetData() );
|
|
DisplayError( this, msg );
|
|
return;
|
|
}
|
|
}
|
|
|
|
/* Update the doc, keyword and doc filename strings */
|
|
if( m_AliasLocation < 0 )
|
|
{
|
|
CurrentLibEntry->m_Doc = m_Doc->GetValue();
|
|
CurrentLibEntry->m_KeyWord = m_Keywords->GetValue();
|
|
CurrentLibEntry->m_DocFile = m_Docfile->GetValue();
|
|
}
|
|
else
|
|
{
|
|
CurrentLibEntry->m_AliasList[m_AliasLocation + ALIAS_DOC] = m_Doc->GetValue();
|
|
CurrentLibEntry->m_AliasList[m_AliasLocation + ALIAS_KEYWORD] = m_Keywords->GetValue();
|
|
CurrentLibEntry->m_AliasList[m_AliasLocation + ALIAS_DOC_FILENAME] = m_Docfile->GetValue();
|
|
}
|
|
|
|
/* Update the alias list */
|
|
/* 1 - Add names: test for a not existing name in old alias list: */
|
|
jj = m_PartAliasList->GetCount();
|
|
for( ii = 0; ii < jj; ii++ )
|
|
{
|
|
if( LocateAlias( CurrentLibEntry->m_AliasList, m_PartAliasList->GetString( ii ) ) < 0 )
|
|
{ // new alias must be created
|
|
CurrentLibEntry->m_AliasList.Add( m_PartAliasList->GetString( ii ) );
|
|
CurrentLibEntry->m_AliasList.Add( wxEmptyString ); // Add a void doc string
|
|
CurrentLibEntry->m_AliasList.Add( wxEmptyString ); // Add a void keyword list string
|
|
CurrentLibEntry->m_AliasList.Add( wxEmptyString ); // Add a void doc filename string
|
|
}
|
|
}
|
|
|
|
/* 2 - Remove delete names: test for an non existing name in new alias list: */
|
|
int kk, kkmax = CurrentLibEntry->m_AliasList.GetCount();
|
|
for( kk = 0; kk < kkmax; )
|
|
{
|
|
jj = m_PartAliasList->GetCount();
|
|
wxString aliasname = CurrentLibEntry->m_AliasList[kk];
|
|
for( ii = 0; ii < jj; ii++ )
|
|
{
|
|
if( aliasname.CmpNoCase( m_PartAliasList->GetString( ii ).GetData() ) == 0 )
|
|
{
|
|
kk += ALIAS_NEXT; // Alias exist in new list. keep it and test next old name
|
|
break;
|
|
}
|
|
}
|
|
|
|
if( ii == jj ) // Alias not found in new list, remove it (4 strings in kk position)
|
|
{
|
|
for( ii = 0; ii < ALIAS_NEXT; ii++ )
|
|
CurrentLibEntry->m_AliasList.RemoveAt( kk );
|
|
|
|
kkmax = CurrentLibEntry->m_AliasList.GetCount();
|
|
}
|
|
}
|
|
|
|
if( !FieldTextCtrl[REFERENCE]->GetText().IsEmpty() )
|
|
{
|
|
CurrentLibEntry->m_Prefix.m_Text = FieldTextCtrl[REFERENCE]->GetText();
|
|
}
|
|
|
|
if( !FieldTextCtrl[VALUE]->GetText().IsEmpty() )
|
|
{
|
|
if( CurrentLibEntry->m_Name.m_Text != FieldTextCtrl[VALUE]->GetText() )
|
|
{
|
|
m_RecreateToolbar = TRUE;
|
|
CurrentLibEntry->m_Name.m_Text = FieldTextCtrl[VALUE]->GetText();
|
|
}
|
|
}
|
|
|
|
CurrentLibEntry->m_Prefix.m_Size.x =
|
|
CurrentLibEntry->m_Prefix.m_Size.y = FieldTextCtrl[REFERENCE]->GetTextSize();
|
|
CurrentLibEntry->m_Name.m_Size.x =
|
|
CurrentLibEntry->m_Name.m_Size.y = FieldTextCtrl[VALUE]->GetTextSize();
|
|
|
|
CurrentLibEntry->m_Prefix.m_Pos = FieldPosition[REFERENCE]->GetValue();
|
|
CurrentLibEntry->m_Name.m_Pos = FieldPosition[VALUE]->GetValue();
|
|
|
|
CurrentLibEntry->m_Prefix.m_Orient = VorientFieldText[REFERENCE]->GetValue() ? 1 : 0;
|
|
CurrentLibEntry->m_Name.m_Orient = VorientFieldText[VALUE]->GetValue() ? 1 : 0;
|
|
|
|
CurrentLibEntry->m_Prefix.m_HJustify =
|
|
hjustify[FieldHJustify[REFERENCE]->GetSelection()];
|
|
CurrentLibEntry->m_Prefix.m_VJustify =
|
|
vjustify[FieldVJustify[REFERENCE]->GetSelection()];
|
|
CurrentLibEntry->m_Name.m_HJustify =
|
|
hjustify[FieldHJustify[VALUE]->GetSelection()];
|
|
CurrentLibEntry->m_Name.m_VJustify =
|
|
vjustify[FieldVJustify[VALUE]->GetSelection()];
|
|
|
|
if( ShowFieldText[REFERENCE]->GetValue() )
|
|
CurrentLibEntry->m_Prefix.m_Attributs &= ~TEXT_NO_VISIBLE;
|
|
else
|
|
CurrentLibEntry->m_Prefix.m_Attributs |= TEXT_NO_VISIBLE;
|
|
|
|
if( ShowFieldText[VALUE]->GetValue() )
|
|
CurrentLibEntry->m_Name.m_Attributs &= ~TEXT_NO_VISIBLE;
|
|
else
|
|
CurrentLibEntry->m_Name.m_Attributs |= TEXT_NO_VISIBLE;
|
|
|
|
for( ii = FOOTPRINT; ii < NUMBER_OF_FIELDS; ii++ )
|
|
{
|
|
LibDrawField* Field = CurrentLibEntry->Fields;
|
|
LibDrawField* NextField, * previousField = NULL;
|
|
while( Field )
|
|
{
|
|
NextField = (LibDrawField*) Field->Pnext;
|
|
if( Field->m_FieldId == ii )
|
|
{
|
|
Field->m_Text = FieldTextCtrl[ii]->GetText();
|
|
Field->m_Size.x = Field->m_Size.y = FieldTextCtrl[ii]->GetTextSize();
|
|
Field->m_HJustify = FieldHJustify[ii]->GetSelection();
|
|
Field->m_VJustify = FieldVJustify[ii]->GetSelection();
|
|
if( ShowFieldText[ii]->GetValue() )
|
|
Field->m_Attributs &= ~TEXT_NO_VISIBLE;
|
|
else
|
|
Field->m_Attributs |= TEXT_NO_VISIBLE;
|
|
Field->m_Orient = VorientFieldText[ii]->GetValue() ? 1 : 0;
|
|
Field->m_Pos = FieldPosition[ii]->GetValue();
|
|
if( Field->m_Text.IsEmpty() ) // An old field exists; new is void, delete it
|
|
{
|
|
delete Field;
|
|
if( previousField )
|
|
previousField->Pnext = NextField;
|
|
else
|
|
CurrentLibEntry->Fields = NextField;
|
|
}
|
|
break;
|
|
}
|
|
|
|
previousField = Field;
|
|
Field = NextField;
|
|
}
|
|
|
|
if( (Field == NULL) && ( !FieldTextCtrl[ii]->GetText().IsEmpty() ) )
|
|
{ // Do not exists: must be created
|
|
Field = new LibDrawField( ii );
|
|
|
|
Field->m_Text = FieldTextCtrl[ii]->GetText();
|
|
Field->m_Size.x = Field->m_Size.y = FieldTextCtrl[ii]->GetTextSize();
|
|
if( ShowFieldText[Field->m_FieldId]->GetValue() )
|
|
Field->m_Attributs &= ~TEXT_NO_VISIBLE;
|
|
else
|
|
Field->m_Attributs |= TEXT_NO_VISIBLE;
|
|
Field->m_Orient = VorientFieldText[Field->m_FieldId]->GetValue() ? 1 : 0;
|
|
Field->m_Pos = FieldPosition[Field->m_FieldId]->GetValue();
|
|
Field->m_HJustify = hjustify[FieldHJustify[Field->m_FieldId]->GetSelection()];
|
|
Field->m_VJustify = vjustify[FieldVJustify[Field->m_FieldId]->GetSelection()];
|
|
Field->Pnext = CurrentLibEntry->Fields;
|
|
CurrentLibEntry->Fields = Field;
|
|
}
|
|
}
|
|
|
|
ii = SelNumberOfUnits->GetValue();
|
|
if( ChangeNbUnitsPerPackage( ii ) )
|
|
m_RecreateToolbar = TRUE;
|
|
|
|
if( AsConvertButt->GetValue() )
|
|
{
|
|
if( !g_AsDeMorgan )
|
|
{
|
|
g_AsDeMorgan = 1;
|
|
if( SetUnsetConvert() )
|
|
m_RecreateToolbar = TRUE;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if( g_AsDeMorgan )
|
|
{
|
|
g_AsDeMorgan = 0;
|
|
if( SetUnsetConvert() )
|
|
m_RecreateToolbar = TRUE;
|
|
}
|
|
}
|
|
|
|
CurrentLibEntry->m_DrawPinNum = ShowPinNumButt->GetValue() ? 1 : 0;
|
|
CurrentLibEntry->m_DrawPinName = ShowPinNameButt->GetValue() ? 1 : 0;
|
|
|
|
if( m_PinsNameInsideButt->GetValue() == FALSE )
|
|
CurrentLibEntry->m_TextInside = 0;
|
|
else
|
|
CurrentLibEntry->m_TextInside = m_SetSkew->GetValue();
|
|
|
|
if( m_OptionPower->GetValue() == TRUE )
|
|
CurrentLibEntry->m_Options = ENTRY_POWER;
|
|
else
|
|
CurrentLibEntry->m_Options = ENTRY_NORMAL;
|
|
|
|
/* Set the option "Units locked".
|
|
* Obviously, cannot be TRUE if there is only one part */
|
|
CurrentLibEntry->m_UnitSelectionLocked = m_OptionPartsLocked->GetValue();
|
|
if( CurrentLibEntry->m_UnitCount <= 1 )
|
|
CurrentLibEntry->m_UnitSelectionLocked = FALSE;
|
|
|
|
if( m_RecreateToolbar )
|
|
m_Parent->ReCreateHToolbar();
|
|
|
|
m_Parent->DisplayLibInfos();
|
|
|
|
Close();
|
|
}
|
|
|
|
|
|
/*******************************************************************************/
|
|
void WinEDA_PartPropertiesFrame::CopyDocToAlias( wxCommandEvent& WXUNUSED (event) )
|
|
/******************************************************************************/
|
|
{
|
|
if( CurrentLibEntry == NULL )
|
|
return;
|
|
if( CurrentAliasName.IsEmpty() )
|
|
return;
|
|
|
|
m_Doc->SetValue( CurrentLibEntry->m_Doc );
|
|
m_Docfile->SetValue( CurrentLibEntry->m_DocFile );
|
|
m_Keywords->SetValue( CurrentLibEntry->m_KeyWord );
|
|
}
|
|
|
|
|
|
/**********************************************************/
|
|
void WinEDA_PartPropertiesFrame::DeleteAllAliasOfPart(
|
|
wxCommandEvent& WXUNUSED (event) )
|
|
/**********************************************************/
|
|
{
|
|
CurrentAliasName.Empty();
|
|
if( CurrentLibEntry )
|
|
{
|
|
if( IsOK( this, _( "Ok to Delete Alias LIST" ) ) )
|
|
{
|
|
m_PartAliasList->Clear();
|
|
m_RecreateToolbar = TRUE;
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
/*******************************************************************************/
|
|
void WinEDA_PartPropertiesFrame::AddAliasOfPart( wxCommandEvent& WXUNUSED (event) )
|
|
/*******************************************************************************/
|
|
|
|
/* Add a new name to the alias list box
|
|
* New name cannot be the root name, and must not exists
|
|
*/
|
|
{
|
|
wxString Line;
|
|
wxString aliasname;
|
|
|
|
if( CurrentLibEntry == NULL )
|
|
return;
|
|
|
|
if( Get_Message( _( "New alias:" ), Line, this ) != 0 )
|
|
return;
|
|
|
|
Line.Replace( wxT( " " ), wxT( "_" ) );
|
|
aliasname = Line;
|
|
|
|
if( CurrentLibEntry->m_Name.m_Text.CmpNoCase( Line ) == 0 )
|
|
{
|
|
DisplayError( this, _( "This is the Root Part" ), 10 ); return;
|
|
}
|
|
|
|
/* test for an existing name: */
|
|
int ii, jj = m_PartAliasList->GetCount();
|
|
for( ii = 0; ii < jj; ii++ )
|
|
{
|
|
if( aliasname.CmpNoCase( m_PartAliasList->GetString( ii ) ) == 0 )
|
|
{
|
|
DisplayError( this, _( "Already in use" ), 10 );
|
|
return;
|
|
}
|
|
}
|
|
|
|
m_PartAliasList->Append( aliasname );
|
|
|
|
m_RecreateToolbar = TRUE;
|
|
}
|
|
|
|
|
|
/********************************************************/
|
|
void WinEDA_PartPropertiesFrame::DeleteAliasOfPart(
|
|
wxCommandEvent& WXUNUSED (event) )
|
|
/********************************************************/
|
|
{
|
|
wxString aliasname = m_PartAliasList->GetStringSelection();
|
|
|
|
if( aliasname.IsEmpty() )
|
|
return;
|
|
if( aliasname == CurrentAliasName )
|
|
{
|
|
wxString msg = CurrentAliasName + _( " is Current Selected Alias!" );
|
|
DisplayError( this, msg );
|
|
return;
|
|
}
|
|
|
|
int ii = m_PartAliasList->GetSelection();
|
|
m_PartAliasList->Delete( ii );
|
|
|
|
m_RecreateToolbar = TRUE;
|
|
}
|
|
|
|
|
|
/********************************************************************/
|
|
bool WinEDA_PartPropertiesFrame::ChangeNbUnitsPerPackage( int MaxUnit )
|
|
/********************************************************************/
|
|
|
|
/* Routine de modification du nombre d'unites par package pour le
|
|
* composant courant;
|
|
*/
|
|
{
|
|
int OldNumUnits, ii, FlagDel = -1;
|
|
LibEDA_BaseStruct* DrawItem, * NextDrawItem;
|
|
|
|
if( CurrentLibEntry == NULL )
|
|
return FALSE;
|
|
|
|
/* Si pas de changement: termine */
|
|
if( CurrentLibEntry->m_UnitCount == MaxUnit )
|
|
return FALSE;
|
|
|
|
OldNumUnits = CurrentLibEntry->m_UnitCount;
|
|
if( OldNumUnits < 1 )
|
|
OldNumUnits = 1;
|
|
|
|
CurrentLibEntry->m_UnitCount = MaxUnit;
|
|
|
|
|
|
/* Traitement des unites enlevees ou rajoutees */
|
|
if( OldNumUnits > CurrentLibEntry->m_UnitCount )
|
|
{
|
|
DrawItem = CurrentLibEntry->m_Drawings;
|
|
for( ; DrawItem != NULL; DrawItem = NextDrawItem )
|
|
{
|
|
NextDrawItem = DrawItem->Next();
|
|
if( DrawItem->m_Unit > MaxUnit ) /* Item a effacer */
|
|
{
|
|
if( FlagDel < 0 )
|
|
{
|
|
if( IsOK( this, _( "Delete units" ) ) )
|
|
{
|
|
/* Si part selectee n'existe plus: selection 1ere unit */
|
|
if( CurrentUnit > MaxUnit )
|
|
CurrentUnit = 1;
|
|
FlagDel = 1;
|
|
}
|
|
else
|
|
{
|
|
FlagDel = 0;
|
|
MaxUnit = OldNumUnits;
|
|
CurrentLibEntry->m_UnitCount = MaxUnit;
|
|
return FALSE;
|
|
}
|
|
}
|
|
DeleteOneLibraryDrawStruct( m_Parent->DrawPanel, NULL, CurrentLibEntry,
|
|
DrawItem, 0 );
|
|
}
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
if( OldNumUnits < CurrentLibEntry->m_UnitCount )
|
|
{
|
|
DrawItem = CurrentLibEntry->m_Drawings;
|
|
for( ; DrawItem != NULL; DrawItem = DrawItem->Next() )
|
|
{
|
|
/* Duplication des items pour autres elements */
|
|
if( DrawItem->m_Unit == 1 )
|
|
{
|
|
for( ii = OldNumUnits + 1; ii <= MaxUnit; ii++ )
|
|
{
|
|
NextDrawItem = CopyDrawEntryStruct( this, DrawItem );
|
|
NextDrawItem->Pnext = CurrentLibEntry->m_Drawings;
|
|
CurrentLibEntry->m_Drawings = NextDrawItem;
|
|
NextDrawItem->m_Unit = ii;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
/*****************************************************/
|
|
bool WinEDA_PartPropertiesFrame::SetUnsetConvert()
|
|
/*****************************************************/
|
|
|
|
/* crée ou efface (selon option AsConvert) les éléments
|
|
* de la représentation convertie d'un composant
|
|
*/
|
|
{
|
|
int FlagDel = 0;
|
|
LibEDA_BaseStruct* DrawItem = NULL, * NextDrawItem;
|
|
|
|
if( g_AsDeMorgan ) /* Representation convertie a creer */
|
|
{
|
|
/* Traitement des elements a ajouter ( pins seulement ) */
|
|
if( CurrentLibEntry )
|
|
DrawItem = CurrentLibEntry->m_Drawings;
|
|
for( ; DrawItem != NULL; DrawItem = DrawItem->Next() )
|
|
{
|
|
/* Duplication des items pour autres elements */
|
|
if( DrawItem->Type() != COMPONENT_PIN_DRAW_TYPE )
|
|
continue;
|
|
if( DrawItem->m_Convert == 1 )
|
|
{
|
|
if( FlagDel == 0 )
|
|
{
|
|
if( IsOK( this, _( "Create pins for Convert items" ) ) )
|
|
FlagDel = 1;
|
|
else
|
|
{
|
|
if( IsOK( this, _( "Part as \"De Morgan\" anymore" ) ) )
|
|
return TRUE;
|
|
|
|
g_AsDeMorgan = 0; return FALSE;
|
|
}
|
|
}
|
|
NextDrawItem = CopyDrawEntryStruct( this, DrawItem );
|
|
NextDrawItem->Pnext = CurrentLibEntry->m_Drawings;
|
|
CurrentLibEntry->m_Drawings = NextDrawItem;
|
|
NextDrawItem->m_Convert = 2;
|
|
}
|
|
}
|
|
}
|
|
else /* Representation convertie a supprimer */
|
|
{
|
|
/* Traitement des elements à supprimer */
|
|
if( CurrentLibEntry )
|
|
DrawItem = CurrentLibEntry->m_Drawings;
|
|
for( ; DrawItem != NULL; DrawItem = NextDrawItem )
|
|
{
|
|
NextDrawItem = DrawItem->Next();
|
|
if( DrawItem->m_Convert > 1 ) /* Item a effacer */
|
|
{
|
|
if( FlagDel == 0 )
|
|
{
|
|
if( IsOK( this, _( "Delete Convert items" ) ) )
|
|
{
|
|
CurrentConvert = 1;
|
|
FlagDel = 1;
|
|
}
|
|
else
|
|
{
|
|
g_AsDeMorgan = 1;
|
|
return FALSE;
|
|
}
|
|
}
|
|
m_Parent->GetScreen()->SetModify();
|
|
DeleteOneLibraryDrawStruct( m_Parent->DrawPanel,
|
|
NULL,
|
|
CurrentLibEntry,
|
|
DrawItem,
|
|
0 );
|
|
}
|
|
}
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
/****************************************************************************/
|
|
void WinEDA_PartPropertiesFrame::BrowseAndSelectDocFile( wxCommandEvent& event )
|
|
/****************************************************************************/
|
|
{
|
|
wxString FullFileName;
|
|
|
|
wxString docpath( g_RealLibDirBuffer ), filename;
|
|
|
|
docpath += wxT( "doc" );
|
|
docpath += STRING_DIR_SEP;
|
|
FullFileName = EDA_FileSelector( _( "Doc Files" ),
|
|
docpath, /* Chemin par defaut */
|
|
wxEmptyString, /* nom fichier par defaut */
|
|
wxEmptyString, /* extension par defaut */
|
|
wxEmptyString, /* Masque d'affichage */
|
|
this,
|
|
wxFD_OPEN,
|
|
TRUE
|
|
);
|
|
if( FullFileName.IsEmpty() )
|
|
return;
|
|
|
|
// Suppression du chemin par defaut pour le fichier de doc:
|
|
filename = MakeReducedFileName( FullFileName, docpath, wxEmptyString );
|
|
m_Docfile->SetValue( filename );
|
|
}
|