1231 lines
38 KiB
Plaintext
1231 lines
38 KiB
Plaintext
/*********************************************************************/
|
|
/* EESchema - edition des librairies: Edition des champs ( Fields ) */
|
|
/*********************************************************************/
|
|
|
|
/* Fichier fieldedi.cpp */
|
|
|
|
#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"
|
|
|
|
static char* PanelText[] =
|
|
{
|
|
"Ref", /* Champ Reference of part, i.e. "IC21" */
|
|
"Name", /* Champ Value of part, i.e. "3.3K" */
|
|
"Fld1",
|
|
"Fld2",
|
|
"Fld3",
|
|
"Fld4",
|
|
"Fld5",
|
|
"Fld6",
|
|
"Fld7",
|
|
"Fld8",
|
|
"Pcb", /* Champ Name Module PCB, i.e. "16DIP300" */
|
|
"Sheet" /* Champ Name Schema component, i.e. "cnt16.sch" */
|
|
};
|
|
|
|
|
|
/* Routines locales */
|
|
static void MoveField( wxDC* DC, int flag );
|
|
static char* PrefixText( LibraryEntryStruct* LibEntry, int Unit );
|
|
|
|
/* Variables locales */
|
|
|
|
extern int CurrentUnit;
|
|
static wxPoint StartCursor;
|
|
|
|
/* 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_FIELD1,
|
|
ID_PANEL_FIELD2,
|
|
ID_PANEL_FIELD3,
|
|
ID_PANEL_FIELD4,
|
|
ID_PANEL_FIELD5,
|
|
ID_PANEL_FIELD6,
|
|
ID_PANEL_FIELD7,
|
|
ID_PANEL_FIELD8,
|
|
ID_PANEL_MODULEPCB,
|
|
ID_PANEL_SUBSCHEMATIC,
|
|
ID_CLOSE_PART_PROPERTIES,
|
|
ID_ACCEPT_PART_PROPERTIES,
|
|
ID_ADD_ALIAS,
|
|
ID_DELETE_ONE_ALIAS,
|
|
ID_DELETE_ALL_ALIAS
|
|
};
|
|
|
|
|
|
/************************************/
|
|
/* class WinEDA_PartPropertiesFrame */
|
|
/************************************/
|
|
|
|
class WinEDA_PartPropertiesFrame : public wxDialog
|
|
{
|
|
private:
|
|
|
|
WinEDA_LibeditFrame* m_Parent;
|
|
wxNotebook* m_NoteBook;
|
|
wxListBox* PartAliasList;
|
|
wxPanel* PanelBasic;
|
|
wxPanel* PanelAlias;
|
|
wxPanel* PanelDoc;
|
|
wxPanel* PanelField[NUMBER_OF_FIELDS];
|
|
|
|
wxCheckBox* AsConvertButt;
|
|
|
|
wxCheckBox* ShowFieldText[NUMBER_OF_FIELDS];
|
|
wxCheckBox* VorientFieldText[NUMBER_OF_FIELDS];
|
|
wxCheckBox* ShowPinNumButt;
|
|
wxCheckBox* ShowPinNameButt;
|
|
wxCheckBox* PinsNameInsideButt;
|
|
wxSpinCtrl* SelNumberOfUnits;
|
|
wxSpinCtrl* m_SetSkew;
|
|
|
|
WinEDA_GraphicTextCtrl* FieldTextCtrl[NUMBER_OF_FIELDS];
|
|
WinEDA_PositionCtrl* FieldPosition[NUMBER_OF_FIELDS];
|
|
int FieldFlags[NUMBER_OF_FIELDS];
|
|
int FieldOrient[NUMBER_OF_FIELDS];
|
|
WinEDA_EnterText* NewDoc;
|
|
WinEDA_EnterText* NewDocfile;
|
|
WinEDA_EnterText* NewKeywords;
|
|
ListOfAliasStruct* AliasListCopy;
|
|
|
|
|
|
public:
|
|
|
|
// Constructor and destructor
|
|
WinEDA_PartPropertiesFrame( WinEDA_LibeditFrame * parent, wxPoint & pos );
|
|
~WinEDA_PartPropertiesFrame()
|
|
{
|
|
if( AliasListCopy )
|
|
AliasListCopy->FreeList();
|
|
};
|
|
|
|
private:
|
|
void PartPropertiesAccept( wxCommandEvent& event );
|
|
void DeleteAllAliasOfPart();
|
|
void DeleteAliasOfPart();
|
|
void AddAliasOfPart();
|
|
bool ChangeNbUnitsPerPackage( int newUnit );
|
|
bool SetUnsetConvert();
|
|
|
|
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::Close )
|
|
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 )
|
|
END_EVENT_TABLE()
|
|
|
|
|
|
void InstallLibeditFrame( WinEDA_LibeditFrame* parent, wxPoint& pos )
|
|
{
|
|
WinEDA_PartPropertiesFrame* frame = new WinEDA_PartPropertiesFrame( parent, pos );
|
|
|
|
frame->ShowModal(); frame->Destroy();
|
|
}
|
|
|
|
|
|
WinEDA_PartPropertiesFrame::WinEDA_PartPropertiesFrame( WinEDA_LibeditFrame* parent,
|
|
wxPoint& framepos ) :
|
|
wxDialog( parent, -1, _( "Componant properties" ), framepos, wxSize( 320, 300 ),
|
|
wxDEFAULT_DIALOG_STYLE | FLOAT_ON_PARENT )
|
|
{
|
|
wxPoint pos;
|
|
wxLayoutConstraints* c;
|
|
|
|
m_Parent = parent;
|
|
|
|
SetAutoLayout( TRUE );
|
|
|
|
Doc[0] = 0; Docfile[0] = 0; Keywords[0] = 0;
|
|
AliasListCopy = NULL;
|
|
|
|
for( int ii = 0; ii < NUMBER_OF_FIELDS; ii++ )
|
|
{
|
|
FieldFlags[ii] = 0;
|
|
}
|
|
|
|
if( CurrentLibEntry )
|
|
{
|
|
if( ListAlias )
|
|
AliasListCopy = ListAlias->DupList();
|
|
|
|
if( CurrentLibEntry->Doc )
|
|
strncpy( Doc, CurrentLibEntry->Doc, 256 );
|
|
if( CurrentLibEntry->KeyWord )
|
|
strncpy( Keywords, CurrentLibEntry->KeyWord, 256 );
|
|
if( CurrentLibEntry->DocFile )
|
|
strncpy( Docfile, CurrentLibEntry->DocFile, 256 );
|
|
|
|
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;
|
|
}
|
|
}
|
|
|
|
m_NoteBook = new wxNotebook( this, ID_LIBEDIT_NOTEBOOK );
|
|
|
|
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 );
|
|
m_NoteBook->SetAutoLayout( TRUE );
|
|
|
|
/* Creation des boutons de commande */
|
|
pos.x = 80; pos.y = 240;
|
|
wxButton* Button = new wxButton( this, ID_CLOSE_PART_PROPERTIES,
|
|
_( "Close" ), pos );
|
|
|
|
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 + 10;
|
|
Button = new wxButton( this, ID_ACCEPT_PART_PROPERTIES,
|
|
_( "Ok" ), pos );
|
|
|
|
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
|
|
PanelBasic = new wxPanel( m_NoteBook, ID_PANEL_BASIC );
|
|
|
|
c = new wxLayoutConstraints;
|
|
c->left.SameAs( m_NoteBook, wxLeft );
|
|
c->right.SameAs( m_NoteBook, wxRight );
|
|
c->bottom.SameAs( m_NoteBook, wxBottom );
|
|
PanelBasic->SetConstraints( c );
|
|
m_NoteBook->AddPage( PanelBasic, _( "Options" ), TRUE );
|
|
|
|
pos.x = 5; pos.y = 25;
|
|
new wxStaticBox( PanelBasic, -1, _( " General : " ), pos, wxSize( 150, 120 ) );
|
|
|
|
pos.x = 10; pos.y += 22;
|
|
AsConvertButt = new wxCheckBox( PanelBasic, -1, _( "As Convert" ), pos );
|
|
|
|
if( g_AsDeMorgan )
|
|
AsConvertButt->SetValue( TRUE );
|
|
|
|
pos.y += 20;
|
|
ShowPinNumButt = new wxCheckBox( PanelBasic, -1, _( "Show Pin Num" ), pos );
|
|
|
|
if( CurrentLibEntry )
|
|
{
|
|
if( CurrentLibEntry->DrawPinNum )
|
|
ShowPinNumButt->SetValue( TRUE );
|
|
}
|
|
else
|
|
ShowPinNumButt->SetValue( TRUE );
|
|
|
|
pos.y += 20;
|
|
ShowPinNameButt = new wxCheckBox( PanelBasic, -1, _( "Show Pin Name" ), pos );
|
|
|
|
if( CurrentLibEntry )
|
|
{
|
|
if( CurrentLibEntry->DrawPinName )
|
|
ShowPinNameButt->SetValue( TRUE );
|
|
}
|
|
else
|
|
ShowPinNameButt->SetValue( TRUE );
|
|
|
|
pos.y += 20;
|
|
PinsNameInsideButt = new wxCheckBox( PanelBasic, -1, _( "Pin Name Inside" ), pos );
|
|
|
|
if( CurrentLibEntry )
|
|
{
|
|
if( CurrentLibEntry->TextInside )
|
|
PinsNameInsideButt->SetValue( TRUE );
|
|
}
|
|
else
|
|
PinsNameInsideButt->SetValue( TRUE );
|
|
|
|
pos.y += 40;
|
|
new wxStaticText( PanelBasic, -1, _( "Number of Units:" ), pos );
|
|
|
|
pos.y += 15;
|
|
wxString number;
|
|
if( CurrentLibEntry )
|
|
number.Printf( "%d", CurrentLibEntry->NumOfUnits );
|
|
else
|
|
number = "1";
|
|
SelNumberOfUnits = new wxSpinCtrl( PanelBasic, -1, number, pos,
|
|
wxDefaultSize, wxSP_ARROW_KEYS | wxSP_WRAP,
|
|
1, 16 );
|
|
|
|
pos.y -= 15; pos.x += 140;
|
|
new wxStaticText( PanelBasic, -1, _( "Skew:" ), pos );
|
|
|
|
pos.y += 15;
|
|
if( CurrentLibEntry && CurrentLibEntry->TextInside )
|
|
number.Printf( "%d", CurrentLibEntry->TextInside );
|
|
else
|
|
number = "40";
|
|
m_SetSkew = new wxSpinCtrl( PanelBasic, -1, number, pos,
|
|
wxDefaultSize, wxSP_ARROW_KEYS | wxSP_WRAP,
|
|
1, 100 );
|
|
|
|
// Add Panel Documentation
|
|
PanelDoc = new wxPanel( m_NoteBook, -1 );
|
|
|
|
c = new wxLayoutConstraints;
|
|
c->left.SameAs( m_NoteBook, wxLeft );
|
|
c->right.SameAs( m_NoteBook, wxRight );
|
|
c->bottom.SameAs( m_NoteBook, wxBottom );
|
|
PanelDoc->SetConstraints( c );
|
|
m_NoteBook->AddPage( PanelDoc, _( "Doc" ), FALSE );
|
|
pos.x = 5; pos.y = 40;
|
|
NewDoc = new WinEDA_EnterText( PanelDoc,
|
|
_( "Doc:" ), Doc,
|
|
pos, wxSize( 285, -1 ) );
|
|
|
|
pos.y += 50;
|
|
NewKeywoed = new WinEDA_EnterText( PanelDoc,
|
|
_( "Keywords:" ), Keywords,
|
|
pos, wxSize( 285, -1 ) );
|
|
|
|
pos.y += 50;
|
|
NewDocFile = new WinEDA_EnterText( PanelDoc,
|
|
_( "DocFileName:" ), Docfile,
|
|
pos, wxSize( 285, -1 ) );
|
|
|
|
// Add Panel Alias List
|
|
PanelAlias = new wxPanel( m_NoteBook, -1 );
|
|
|
|
c = new wxLayoutConstraints;
|
|
c->left.SameAs( m_NoteBook, wxLeft );
|
|
c->right.SameAs( m_NoteBook, wxRight );
|
|
c->bottom.SameAs( m_NoteBook, wxBottom );
|
|
PanelAlias->SetConstraints( c );
|
|
m_NoteBook->AddPage( PanelAlias, _( "Alias" ), FALSE );
|
|
|
|
pos.x = 200; pos.y = 70;
|
|
new wxButton( PanelAlias, ID_ADD_ALIAS,
|
|
_( "Add" ), pos );
|
|
|
|
pos.y += Button->GetDefaultSize().y + 10;
|
|
new wxButton( PanelAlias, ID_DELETE_ONE_ALIAS,
|
|
_( "Delete" ), pos );
|
|
|
|
pos.y += Button->GetDefaultSize().y + 10;
|
|
new wxButton( PanelAlias, ID_DELETE_ALL_ALIAS,
|
|
_( "Delete All" ), pos );
|
|
|
|
pos.x = 5; pos.y = 30;
|
|
PartAliasList = new wxListBox( PanelAlias,
|
|
-1,
|
|
pos, wxSize( 160, 170 ),
|
|
0, NULL,
|
|
wxLB_ALWAYS_SB | wxLB_SINGLE );
|
|
|
|
wxStaticText* Msg = new wxStaticText( PanelAlias, -1, _( "Alias" ),
|
|
wxPoint (pos.x, pos.y - 20) );
|
|
|
|
Msg->SetForegroundColour( wxColour( 200, 0, 0 ) );
|
|
/* lecture des alias */
|
|
ListOfAliasStruct* Alias = AliasListCopy;
|
|
while( Alias )
|
|
{
|
|
PartAliasList->Append( Alias->m_Name.m_Text );
|
|
Alias = Alias->Next;
|
|
}
|
|
|
|
// Add panel Fields
|
|
for( int ii = 0; ii < NUMBER_OF_FIELDS; ii++ )
|
|
{
|
|
PanelField[ii] = new wxPanel( m_NoteBook, ID_PANEL_REFERENCE + ii );
|
|
|
|
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], PanelText[ii], FALSE );
|
|
|
|
pos.x = 10; pos.y = 20;
|
|
ShowFieldText[ii] = new wxCheckBox( PanelField[ii], -1,
|
|
_( "Show Text" ), pos );
|
|
|
|
if( (FieldFlags[ii] & TEXT_NO_VISIBLE ) == 0 )
|
|
ShowFieldText[ii]->SetValue( TRUE );
|
|
|
|
pos.x += 150;
|
|
VorientFieldText[ii] = new wxCheckBox( PanelField[ii], -1,
|
|
_( "Vertical" ), pos );
|
|
|
|
if( FieldOrient[ii] )
|
|
VorientFieldText[ii]->SetValue( TRUE );
|
|
|
|
pos.x = 10; pos.y += 50;
|
|
wxPoint txtpos;
|
|
|
|
switch( ii )
|
|
{
|
|
case REFERENCE:
|
|
if( CurrentLibEntry )
|
|
txtpos = CurrentLibEntry->m_Prefix.m_Pos;
|
|
else
|
|
txtpos = wxPoint( 0, 0 );
|
|
FieldTextCtrl[ii] = new WinEDA_GraphicTextCtrl(
|
|
PanelField[ii],
|
|
PanelText[ii],
|
|
CurrentLibEntry ? CurrentLibEntry->
|
|
m_Prefix.m_Text : (char*) "U",
|
|
CurrentLibEntry ? CurrentLibEntry->
|
|
m_Prefix.m_Size : 50,
|
|
UnitMetric,
|
|
pos,
|
|
200,
|
|
TRUE );
|
|
|
|
FieldPosition[ii] = new WinEDA_PositionCtrl( PanelField[ii],
|
|
txtpos,
|
|
UnitMetric, wxPoint (pos.x + 150,
|
|
pos.y + 32) );
|
|
|
|
break;
|
|
|
|
case VALUE:
|
|
if( CurrentLibEntry )
|
|
txtpos = CurrentLibEntry->m_Name.m_Pos;
|
|
else
|
|
txtpos = wxPoint( 0, 0 );
|
|
FieldTextCtrl[ii] = new WinEDA_GraphicTextCtrl(
|
|
PanelField[ii],
|
|
PanelText[ii],
|
|
CurrentLibEntry ? CurrentLibEntry->
|
|
m_Name.m_Text : NULL,
|
|
CurrentLibEntry ? CurrentLibEntry->
|
|
m_Name.m_Size : 50,
|
|
UnitMetric,
|
|
pos,
|
|
200,
|
|
TRUE );
|
|
|
|
FieldPosition[ii] = new WinEDA_PositionCtrl( PanelField[ii],
|
|
txtpos,
|
|
UnitMetric, wxPoint (pos.x + 150,
|
|
pos.y + 32) );
|
|
|
|
break;
|
|
|
|
default:
|
|
int fsize; char* ftext; wxPoint fpos;
|
|
fsize = 50; ftext = NULL;
|
|
LibDrawField* 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; ftext = Field->m_Text;
|
|
fpos = Field->m_Pos;
|
|
break;
|
|
}
|
|
Field = (LibDrawField*) Field->Pnext;
|
|
}
|
|
}
|
|
|
|
FieldTextCtrl[ii] = new WinEDA_GraphicTextCtrl( PanelField[ii],
|
|
PanelText[ii],
|
|
ftext, fsize,
|
|
UnitMetric,
|
|
pos, 200, TRUE );
|
|
|
|
FieldPosition[ii] = new WinEDA_PositionCtrl( PanelField[ii],
|
|
fpos,
|
|
UnitMetric, wxPoint (pos.x + 150,
|
|
pos.y + 32) );
|
|
|
|
break;
|
|
}
|
|
}
|
|
|
|
SetModal( TRUE );
|
|
}
|
|
|
|
|
|
/***************************************************************************/
|
|
/* WinEDA_PartPropertiesFrame::PartPropertiesAccept(wxCommandEvent& event) */
|
|
/***************************************************************************/
|
|
|
|
/* Met a jour les differents parametres pour le composant en cours d'édition
|
|
*/
|
|
|
|
void WinEDA_PartPropertiesFrame::PartPropertiesAccept( wxCommandEvent& event )
|
|
{
|
|
bool recreateTB = FALSE;
|
|
|
|
if( CurrentLibEntry == NULL )
|
|
{
|
|
Close(); return;
|
|
}
|
|
|
|
m_Parent->CurrentScreen->SetModify();
|
|
m_Parent->CurrentScreen->SetRefreshReq();
|
|
|
|
if( ListAlias )
|
|
ListAlias->FreeList();
|
|
if( AliasListCopy )
|
|
ListAlias = AliasListCopy->DupList();
|
|
|
|
if( CurrentLibEntry->Doc && strcmp( Doc, CurrentLibEntry->Doc ) )
|
|
{
|
|
free( CurrentLibEntry->Doc ); CurrentLibEntry->Doc = NULL;
|
|
}
|
|
if( strlen( Doc ) )
|
|
CurrentLibEntry->Doc = strdup( Doc );
|
|
|
|
if( CurrentLibEntry->KeyWord && strcmp( Keywords, CurrentLibEntry->KeyWord ) )
|
|
{
|
|
free( CurrentLibEntry->KeyWord ); CurrentLibEntry->KeyWord = NULL;
|
|
}
|
|
if( strlen( Keywords ) )
|
|
CurrentLibEntry->KeyWord = strdup( Keywords );
|
|
|
|
if( CurrentLibEntry->DocFile && strcmp( Docfile, CurrentLibEntry->DocFile ) )
|
|
{
|
|
free( CurrentLibEntry->DocFile ); CurrentLibEntry->DocFile = NULL;
|
|
}
|
|
if( strlen( Docfile ) )
|
|
CurrentLibEntry->DocFile = strdup( Docfile );
|
|
|
|
|
|
CurrentLibEntry->m_Prefix.SetText( (char*) FieldTextCtrl[REFERENCE]->GetText() );
|
|
CurrentLibEntry->m_Name.SetText( (char*) FieldTextCtrl[VALUE]->GetText() );
|
|
|
|
CurrentLibEntry->m_Prefix.m_Size = FieldTextCtrl[REFERENCE]->GetTextSize();
|
|
CurrentLibEntry->m_Name.m_Size = FieldTextCtrl[VALUE]->GetTextSize();
|
|
|
|
CurrentLibEntry->m_Prefix.m_Pos = FieldPosition[REFERENCE]->GetCoord();
|
|
CurrentLibEntry->m_Name.m_Pos = FieldPosition[VALUE]->GetCoord();
|
|
|
|
CurrentLibEntry->m_Prefix.m_Orient = VorientFieldText[REFERENCE]->GetValue() ? 1 : 0;
|
|
CurrentLibEntry->m_Name.m_Orient = VorientFieldText[VALUE]->GetValue() ? 1 : 0;
|
|
|
|
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( int ii = FIELD1; 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->SetText( (char*) FieldTextCtrl[ii]->GetText() );
|
|
Field->m_Size = FieldTextCtrl[ii]->GetTextSize();
|
|
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[Field->m_FieldId]->GetCoord();
|
|
if( Field->m_Text == NULL )
|
|
{
|
|
delete Field;
|
|
if( previousField )
|
|
previousField->Pnext = NextField;
|
|
else
|
|
CurrentLibEntry->Fields = NextField;
|
|
}
|
|
break;
|
|
}
|
|
|
|
previousField = Field;
|
|
Field = NextField;
|
|
}
|
|
|
|
if( (Field == NULL) && strlen( FieldTextCtrl[ii]->GetText() ) )
|
|
{ // N'existe pas: a creer
|
|
Field = new LibDrawField( ii );
|
|
|
|
Field->SetText( (char*) FieldTextCtrl[ii]->GetText() );
|
|
Field->m_Size = FieldTextCtrl[ii]->GetTextSize();
|
|
Field->Pnext = CurrentLibEntry->Fields;
|
|
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]->GetCoord();
|
|
CurrentLibEntry->Fields = Field;
|
|
}
|
|
}
|
|
|
|
int ii = SelNumberOfUnits->GetValue();
|
|
if( ChangeNbUnitsPerPackage( ii ) )
|
|
recreateTB = TRUE;
|
|
|
|
if( AsConvertButt->GetValue() )
|
|
{
|
|
if( !g_AsDeMorgan )
|
|
{
|
|
g_AsDeMorgan = 1;
|
|
if( SetUnsetConvert() )
|
|
recreateTB = TRUE;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if( g_AsDeMorgan )
|
|
{
|
|
g_AsDeMorgan = 0;
|
|
if( SetUnsetConvert() )
|
|
recreateTB = TRUE;
|
|
}
|
|
}
|
|
|
|
CurrentLibEntry->DrawPinNum = ShowPinNumButt->GetValue() ? 1 : 0;
|
|
CurrentLibEntry->DrawPinName = ShowPinNameButt->GetValue() ? 1 : 0;
|
|
|
|
if( PinsNameInsideButt->GetValue() == FALSE )
|
|
CurrentLibEntry->TextInside = 0;
|
|
else
|
|
CurrentLibEntry->TextInside = m_SetSkew->GetValue();
|
|
|
|
if( recreateTB )
|
|
m_Parent->ReCreateHToolbar();
|
|
|
|
Close();
|
|
}
|
|
|
|
|
|
/***************************************************************/
|
|
/* void WinEDA_PartPropertiesFrame::DeleteAllAliasOfPart() */
|
|
/***************************************************************/
|
|
|
|
void WinEDA_PartPropertiesFrame::DeleteAllAliasOfPart()
|
|
{
|
|
if( CurrentLibEntry && AliasListCopy )
|
|
{
|
|
if( confirmation( _( "Ok to Delete Alias LIST" ) ) == YES )
|
|
{
|
|
if( AliasListCopy )
|
|
AliasListCopy->FreeList();
|
|
AliasListCopy = NULL;
|
|
PartAliasList->Clear();
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
/*********************************************************/
|
|
/* void WinEDA_PartPropertiesFrame::AddAliasOfPart() */
|
|
/*********************************************************/
|
|
|
|
void WinEDA_PartPropertiesFrame::AddAliasOfPart()
|
|
{
|
|
char Line[LINE_LEN];
|
|
int llen;
|
|
ListOfAliasStruct* NewAlias;
|
|
|
|
if( CurrentLibEntry == NULL )
|
|
return;
|
|
|
|
*Line = 0;
|
|
if( Get_Message( _( "Alias:" ), Line, this ) != 0 )
|
|
return;
|
|
|
|
ChangeSpaces( Line, '_' );
|
|
llen = strlen( Line ) + 1;
|
|
|
|
NewAlias = LocateAlias( AliasListCopy, Line );
|
|
if( NewAlias )
|
|
{
|
|
DisplayError( _( "Already in use" ), 10 ); return;
|
|
}
|
|
NewAlias = new ListOfAliasStruct( Line );
|
|
|
|
NewAlias->Next = AliasListCopy;
|
|
AliasListCopy = NewAlias;
|
|
|
|
/* affichage des alias */
|
|
PartAliasList->Clear();
|
|
ListOfAliasStruct* Alias = AliasListCopy;
|
|
while( Alias )
|
|
{
|
|
PartAliasList->Append( Alias->m_Name.m_Text );
|
|
Alias = Alias->Next;
|
|
}
|
|
}
|
|
|
|
|
|
/********************************/
|
|
/* void DeleteAliasOfPart() */
|
|
/********************************/
|
|
|
|
void WinEDA_PartPropertiesFrame::DeleteAliasOfPart()
|
|
{
|
|
ListOfAliasStruct* Alias;
|
|
wxString aliasname;
|
|
|
|
if( CurrentLibEntry == NULL )
|
|
return;
|
|
if( AliasListCopy == NULL )
|
|
return;
|
|
|
|
aliasname = PartAliasList->GetStringSelection();
|
|
if( aliasname == "" )
|
|
return;
|
|
|
|
Alias = AliasListCopy;
|
|
ListOfAliasStruct* Previous = NULL;
|
|
while( Alias )
|
|
{
|
|
if( stricmp( aliasname.GetData(), Alias->m_Name.m_Text ) == 0 )
|
|
{
|
|
if( Previous )
|
|
Previous->Next = Alias->Next;
|
|
else
|
|
AliasListCopy = Alias->Next;
|
|
delete Alias;
|
|
break;
|
|
}
|
|
Previous = Alias;
|
|
Alias = Alias->Next;
|
|
}
|
|
|
|
/* affichage des alias */
|
|
PartAliasList->Clear();
|
|
Alias = AliasListCopy;
|
|
while( Alias )
|
|
{
|
|
PartAliasList->Append( Alias->m_Name.m_Text );
|
|
Alias = Alias->Next;
|
|
}
|
|
}
|
|
|
|
|
|
/************************************************************/
|
|
static void ExitMoveField( WinEDA_DrawFrame* frame, wxDC* DC )
|
|
/************************************************************/
|
|
{
|
|
frame->CurrentScreen->ManageCurseur = NULL;
|
|
frame->CurrentScreen->ForceCloseManageCurseur = NULL;
|
|
if( CurrentDrawItem == NULL )
|
|
return;
|
|
|
|
wxPoint curpos;
|
|
curpos = frame->CurrentScreen->Curseur;
|
|
frame->CurrentScreen->Curseur = StartCursor;
|
|
MoveField( DC, 1 );
|
|
frame->CurrentScreen->Curseur = curpos;
|
|
CurrentDrawItem->m_Flags = 0;
|
|
|
|
CurrentDrawItem = NULL;
|
|
}
|
|
|
|
|
|
/*********************************************/
|
|
/* static void StartMoveField(COMMAND * Cmd) */
|
|
/*********************************************/
|
|
/* Initialise le deplacement d'un champ ( ref ou Name) */
|
|
void WinEDA_LibeditFrame::StartMoveField( wxDC* DC, LibDrawField* field )
|
|
{
|
|
if( (CurrentLibEntry == NULL) || ( field == NULL ) )
|
|
return;
|
|
CurrentDrawItem = field;
|
|
CurrentDrawItem->m_Flags |= IS_MOVED;
|
|
CurrentScreen->ManageCurseur = MoveField;
|
|
CurrentScreen->ForceCloseManageCurseur = ExitMoveField;
|
|
CurrentScreen->ManageCurseur( DC, 1 );
|
|
StartCursor = CurrentScreen->Curseur;
|
|
}
|
|
|
|
|
|
/*****************************************************************/
|
|
/* Routine d'affichage du texte 'Field' en cours de deplacement. */
|
|
/* Routine normalement attachee au curseur */
|
|
/*****************************************************************/
|
|
static void MoveField( wxDC* DC, int flag )
|
|
{
|
|
int color;
|
|
LibDrawField* Field = (LibDrawField*) CurrentDrawItem;
|
|
|
|
if( (CurrentLibEntry == NULL) || (Field == NULL) )
|
|
return;
|
|
|
|
GRSetDrawMode( DC, XOR_MODE );
|
|
|
|
switch( Field->m_FieldId )
|
|
{
|
|
case VALUE:
|
|
color = ReturnLayerColor( LAYER_VALUEPART );
|
|
break;
|
|
|
|
case REFERENCE:
|
|
color = ReturnLayerColor( LAYER_REFERENCEPART );
|
|
break;
|
|
|
|
default:
|
|
color = ReturnLayerColor( LAYER_FIELDS );
|
|
break;
|
|
}
|
|
|
|
if( Field->m_Attributs & TEXT_NO_VISIBLE )
|
|
color = DARKGRAY;
|
|
if( flag >= 0 )
|
|
Gr_E_texte( DC, Field->m_Pos.x, -Field->m_Pos.y,
|
|
color, Field->m_Text,
|
|
Field->m_Orient, Field->m_Size,
|
|
GR_TEXT_HJUSTIFY_CENTER, GR_TEXT_VJUSTIFY_CENTER );
|
|
|
|
Field->m_Pos.x = ActiveScreen->Curseur.x;
|
|
Field->m_Pos.y = -ActiveScreen->Curseur.y;
|
|
|
|
Gr_E_texte( DC, Field->m_Pos.x, -Field->m_Pos.y,
|
|
color, Field->m_Text,
|
|
Field->m_Orient, Field->m_Size,
|
|
GR_TEXT_HJUSTIFY_CENTER, GR_TEXT_VJUSTIFY_CENTER );
|
|
}
|
|
|
|
|
|
/********************************/
|
|
/* static void PlaceField() */
|
|
/********************************/
|
|
|
|
void WinEDA_LibeditFrame::PlaceField( wxDC* DC, LibDrawField* Field )
|
|
{
|
|
int color;
|
|
|
|
if( Field == NULL )
|
|
return;
|
|
|
|
GRSetDrawMode( DC, GR_DEFAULT_DRAWMODE );
|
|
|
|
switch( Field->m_FieldId )
|
|
{
|
|
case REFERENCE:
|
|
color = ReturnLayerColor( LAYER_REFERENCEPART );
|
|
break;
|
|
|
|
case VALUE:
|
|
color = ReturnLayerColor( LAYER_VALUEPART );
|
|
break;
|
|
|
|
default:
|
|
color = ReturnLayerColor( LAYER_FIELDS );
|
|
break;
|
|
}
|
|
|
|
if( Field->m_Attributs & TEXT_NO_VISIBLE )
|
|
color = DARKGRAY;
|
|
Gr_E_texte( DC, Field->m_Pos.x, -Field->m_Pos.y,
|
|
color, Field->m_Text,
|
|
Field->m_Orient, Field->m_Size,
|
|
GR_TEXT_HJUSTIFY_CENTER, GR_TEXT_VJUSTIFY_CENTER );
|
|
|
|
Field->m_Flags = 0;
|
|
|
|
CurrentScreen->SetModify();
|
|
CurrentScreen->ManageCurseur = NULL;
|
|
CurrentScreen->ForceCloseManageCurseur = NULL;
|
|
CurrentDrawItem = NULL;
|
|
}
|
|
|
|
|
|
/****************************************/
|
|
/* static void EditField(COMMAND * Cmd) */
|
|
/****************************************/
|
|
|
|
void WinEDA_LibeditFrame::EditField( wxDC* DC, LibDrawField* Field )
|
|
{
|
|
char Text[LINE_LEN];
|
|
int color;
|
|
|
|
wxClientDC dc( DrawPanel );
|
|
|
|
if( Field== NULL )
|
|
return;
|
|
|
|
switch( Field->m_FieldId )
|
|
{
|
|
case REFERENCE:
|
|
color = ReturnLayerColor( LAYER_REFERENCEPART );
|
|
break;
|
|
|
|
case VALUE:
|
|
color = ReturnLayerColor( LAYER_VALUEPART );
|
|
break;
|
|
|
|
default:
|
|
color = ReturnLayerColor( LAYER_FIELDS );
|
|
break;
|
|
}
|
|
|
|
*Text = 0;
|
|
if( Field->m_Attributs & TEXT_NO_VISIBLE )
|
|
color = DARKGRAY;
|
|
|
|
if( Field->m_Text )
|
|
strcpy( Text, Field->m_Text );
|
|
Get_Message( _( "Text: " ), Text, this );
|
|
ChangeSpaces( Text, '_' );
|
|
|
|
GRSetDrawMode( &dc, XOR_MODE );
|
|
Gr_E_texte( DC, Field->m_Pos.x, -Field->m_Pos.y,
|
|
color, Field->m_Text,
|
|
Field->m_Orient, Field->m_Size,
|
|
GR_TEXT_HJUSTIFY_CENTER, GR_TEXT_VJUSTIFY_CENTER );
|
|
|
|
Field->SetText( Text );
|
|
|
|
if( Field->m_Flags == 0 )
|
|
GRSetDrawMode( &dc, GR_DEFAULT_DRAWMODE );
|
|
|
|
Gr_E_texte( DC, Field->m_Pos.x, -Field->m_Pos.y,
|
|
color, Field->m_Text,
|
|
Field->m_Orient, Field->m_Size,
|
|
GR_TEXT_HJUSTIFY_CENTER, GR_TEXT_VJUSTIFY_CENTER );
|
|
|
|
CurrentScreen->SetModify();
|
|
}
|
|
|
|
|
|
/*******************************************************************/
|
|
void WinEDA_LibeditFrame::RotateField( wxDC* DC, LibDrawField* Field )
|
|
/*******************************************************************/
|
|
|
|
/*
|
|
* Routine de modification de l'orientation ( Horiz ou Vert. ) du champ.
|
|
* si un champ est en cours d'edition, modif de celui ci.
|
|
* sinon Modif du champ pointe par la souris
|
|
*/
|
|
{
|
|
int color;
|
|
|
|
if( Field == NULL )
|
|
return;
|
|
|
|
CurrentScreen->SetModify();
|
|
|
|
switch( Field->m_FieldId )
|
|
{
|
|
case REFERENCE:
|
|
color = ReturnLayerColor( LAYER_REFERENCEPART );
|
|
break;
|
|
|
|
case VALUE:
|
|
color = ReturnLayerColor( LAYER_VALUEPART );
|
|
break;
|
|
|
|
default:
|
|
color = ReturnLayerColor( LAYER_FIELDS );
|
|
break;
|
|
}
|
|
|
|
if( Field->m_Attributs & TEXT_NO_VISIBLE )
|
|
color = DARKGRAY;
|
|
|
|
GRSetDrawMode( DC, XOR_MODE );
|
|
Gr_E_texte( DC, Field->m_Pos.x, -Field->m_Pos.y,
|
|
color, Field->m_Text,
|
|
Field->m_Orient, Field->m_Size,
|
|
GR_TEXT_HJUSTIFY_CENTER, GR_TEXT_VJUSTIFY_CENTER );
|
|
|
|
if( Field->m_Orient )
|
|
Field->m_Orient = 0;
|
|
else
|
|
Field->m_Orient = 1;
|
|
|
|
if( Field->m_Flags == 0 )
|
|
GRSetDrawMode( DC, GR_DEFAULT_DRAWMODE );
|
|
|
|
Gr_E_texte( DC, Field->m_Pos.x, -Field->m_Pos.y,
|
|
color, Field->m_Text,
|
|
Field->m_Orient, Field->m_Size,
|
|
GR_TEXT_HJUSTIFY_CENTER, GR_TEXT_VJUSTIFY_CENTER );
|
|
}
|
|
|
|
|
|
/********************************************************/
|
|
/* static int LocateField(LibraryEntryStruct *LibEntry) */
|
|
/********************************************************/
|
|
|
|
/* Localise le champ (ref ou name) pointe par la souris
|
|
* retourne:
|
|
* < 0: Pas de champ
|
|
* 0: Ref
|
|
* 1: Name(s)
|
|
* > 2 = Num Field
|
|
*/
|
|
LibDrawField* WinEDA_LibeditFrame::LocateField( LibraryEntryStruct* LibEntry )
|
|
{
|
|
int x0, y0, x1, y1; /* Rectangle d'encadrement des textes a localiser */
|
|
int dx, dy; /* Dimensions du texte */
|
|
LibDrawField* Field;
|
|
|
|
/* Localisation du Nom */
|
|
x0 = LibEntry->m_Name.m_Pos.x;
|
|
y0 = -LibEntry->m_Name.m_Pos.y;
|
|
dx = LibEntry->m_Name.m_Size * strlen( LibEntry->m_Name.m_Text ),
|
|
dy = LibEntry->m_Name.m_Size;
|
|
if( LibEntry->m_Name.m_Orient )
|
|
EXCHG( dx, dy );
|
|
x0 -= dx / 2; y0 -= dy / 2;
|
|
x1 = x0 + dx; y1 = y0 + dy;
|
|
|
|
if( (CurrentScreen->Curseur.x >= x0) && ( CurrentScreen->Curseur.x <= x1)
|
|
&& (CurrentScreen->Curseur.y >= y0) && ( CurrentScreen->Curseur.y <= y1) )
|
|
return &LibEntry->m_Name;
|
|
|
|
/* Localisation du Prefix */
|
|
x0 = LibEntry->m_Prefix.m_Pos.x;
|
|
y0 = -LibEntry->m_Prefix.m_Pos.y;
|
|
dx = LibEntry->m_Prefix.m_Size * strlen( LibEntry->m_Prefix.m_Text ),
|
|
dy = LibEntry->m_Prefix.m_Size;
|
|
if( LibEntry->m_Prefix.m_Orient )
|
|
EXCHG( dx, dy );
|
|
x0 -= dx / 2; y0 -= dy / 2;
|
|
x1 = x0 + dx; y1 = y0 + dy;
|
|
|
|
if( (CurrentScreen->Curseur.x >= x0) && ( CurrentScreen->Curseur.x <= x1)
|
|
&& (CurrentScreen->Curseur.y >= y0) && ( CurrentScreen->Curseur.y <= y1) )
|
|
return &LibEntry->m_Prefix;
|
|
|
|
/* Localisation des autres fields */
|
|
for( Field = LibEntry->Fields; Field != NULL;
|
|
Field = (LibDrawField*) Field->Pnext )
|
|
{
|
|
if( Field->m_Text == NULL )
|
|
continue;
|
|
x0 = Field->m_Pos.x; y0 = -Field->m_Pos.y;
|
|
dx = Field->m_Size * strlen( Field->m_Text ),
|
|
dy = Field->m_Size;
|
|
if( Field->m_Orient )
|
|
EXCHG( dx, dy );
|
|
x0 -= dx / 2; y0 -= dy / 2;
|
|
x1 = x0 + dx; y1 = y0 + dy;
|
|
if( (CurrentScreen->Curseur.x >= x0) && ( CurrentScreen->Curseur.x <= x1)
|
|
&& (CurrentScreen->Curseur.y >= y0) && ( CurrentScreen->Curseur.y <= y1) )
|
|
return Field;
|
|
}
|
|
|
|
return NULL;
|
|
}
|
|
|
|
|
|
/*********************************************************************/
|
|
/* static char * PrefixText(LibraryEntryStruct * LibEntry, int Unit) */
|
|
/*********************************************************************/
|
|
|
|
/* Calcule l'affichage complet du prefixe ( texte + '?' + ident unit )
|
|
* Retourne un pointeur sur le nouveau texte (allocation statique)
|
|
*/
|
|
static char* PrefixText( LibraryEntryStruct* LibEntry, int Unit )
|
|
{
|
|
static char Text[LINE_LEN];
|
|
|
|
if( LibEntry->NumOfUnits > 1 )
|
|
sprintf( Text, "%s?%c", LibEntry->m_Prefix.m_Text, Unit + 'A' - 1 );
|
|
else
|
|
sprintf( Text, "%s?", LibEntry->m_Prefix.m_Text );
|
|
return Text;
|
|
}
|
|
|
|
|
|
/*****************************************************************/
|
|
/* void WinEDA_PartPropertiesFrame::ChangeNbUnitsPerPackagevoid) */
|
|
/*****************************************************************/
|
|
|
|
/* Routine de modification du nombre d'unites par package pour le
|
|
* composant courant;
|
|
*/
|
|
bool WinEDA_PartPropertiesFrame::ChangeNbUnitsPerPackage( int MaxUnit )
|
|
{
|
|
int OldNumUnits, ii, FlagDel = -1;
|
|
LibEDA_BaseStruct* DrawItem, * NextDrawItem;
|
|
|
|
if( CurrentLibEntry == NULL )
|
|
return FALSE;
|
|
|
|
/* Si pas de changement: termine */
|
|
if( CurrentLibEntry->NumOfUnits == MaxUnit )
|
|
return FALSE;
|
|
|
|
OldNumUnits = CurrentLibEntry->NumOfUnits;
|
|
if( OldNumUnits < 1 )
|
|
OldNumUnits = 1;
|
|
|
|
CurrentLibEntry->NumOfUnits = MaxUnit;
|
|
|
|
|
|
/* Traitement des unites enlevees ou rajoutees */
|
|
if( OldNumUnits > CurrentLibEntry->NumOfUnits )
|
|
{
|
|
DrawItem = CurrentLibEntry->Drawings;
|
|
for( ; DrawItem != NULL; DrawItem = NextDrawItem )
|
|
{
|
|
NextDrawItem = DrawItem->Pnext;
|
|
if( DrawItem->m_Unit > MaxUnit ) /* Item a effacer */
|
|
{
|
|
if( FlagDel < 0 )
|
|
{
|
|
if( confirmation( _( "Delete units" ) ) == YES )
|
|
{
|
|
/* Si part selectee n'existe plus: selection 1ere unit */
|
|
if( CurrentUnit > MaxUnit )
|
|
CurrentUnit = 1;
|
|
FlagDel = 1;
|
|
}
|
|
else
|
|
{
|
|
FlagDel = 0;
|
|
MaxUnit = OldNumUnits;
|
|
CurrentLibEntry->NumOfUnits = MaxUnit;
|
|
return FALSE;
|
|
}
|
|
}
|
|
DeleteOneLibraryDrawStruct( NULL, CurrentLibEntry,
|
|
DrawItem, 0 );
|
|
}
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
if( OldNumUnits < CurrentLibEntry->NumOfUnits )
|
|
{
|
|
DrawItem = CurrentLibEntry->Drawings;
|
|
for( ; DrawItem != NULL; DrawItem = DrawItem->Pnext )
|
|
{
|
|
/* Duplication des items pour autres elements */
|
|
if( DrawItem->m_Unit == 1 )
|
|
{
|
|
for( ii = OldNumUnits + 1; ii <= MaxUnit; ii++ )
|
|
{
|
|
NextDrawItem = CopyDrawEntryStruct( DrawItem );
|
|
NextDrawItem->Pnext = CurrentLibEntry->Drawings;
|
|
CurrentLibEntry->Drawings = NextDrawItem;
|
|
NextDrawItem->m_Unit = ii;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
/**********************************************************/
|
|
/* void WinEDA_PartPropertiesFrame::SetUnsetConvert() */
|
|
/**********************************************************/
|
|
|
|
/* crée ou efface (selon option AsConvert) les éléments
|
|
* de la représentation convertie d'un composant
|
|
*/
|
|
bool WinEDA_PartPropertiesFrame::SetUnsetConvert()
|
|
{
|
|
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->Drawings;
|
|
for( ; DrawItem != NULL; DrawItem = DrawItem->Pnext )
|
|
{
|
|
/* Duplication des items pour autres elements */
|
|
if( DrawItem->Type() != PIN_DRAW_TYPE )
|
|
continue;
|
|
if( DrawItem->m_Convert == 1 )
|
|
{
|
|
if( FlagDel == 0 )
|
|
{
|
|
if( confirmation( _( "Create pins for Convert items" ) ) == YES )
|
|
FlagDel = 1;
|
|
else
|
|
{
|
|
if( confirmation( _( "Part as \"De Morgan\" anymore" ) ) == YES )
|
|
return TRUE;
|
|
|
|
g_AsDeMorgan = 0; return FALSE;
|
|
}
|
|
}
|
|
NextDrawItem = CopyDrawEntryStruct( DrawItem );
|
|
NextDrawItem->Pnext = CurrentLibEntry->Drawings;
|
|
CurrentLibEntry->Drawings = NextDrawItem;
|
|
NextDrawItem->m_Convert = 2;
|
|
}
|
|
}
|
|
}
|
|
else /* Representation convertie a supprimer */
|
|
{
|
|
/* Traitement des elements à supprimer */
|
|
if( CurrentLibEntry )
|
|
DrawItem = CurrentLibEntry->Drawings;
|
|
for( ; DrawItem != NULL; DrawItem = NextDrawItem )
|
|
{
|
|
NextDrawItem = DrawItem->Pnext;
|
|
if( DrawItem->m_Convert > 1 ) /* Item a effacer */
|
|
{
|
|
if( FlagDel == 0 )
|
|
{
|
|
if( confirmation( _( "Delete Convert items" ) ) == YES )
|
|
{
|
|
CurrentConvert = 1;
|
|
FlagDel = 1;
|
|
}
|
|
else
|
|
{
|
|
g_AsDeMorgan = 1;
|
|
return FALSE;
|
|
}
|
|
}
|
|
ActiveScreen->SetModify();
|
|
DeleteOneLibraryDrawStruct( NULL, CurrentLibEntry, DrawItem, 0 );
|
|
}
|
|
}
|
|
}
|
|
return TRUE;
|
|
}
|