diff --git a/eeschema/annotate.cpp b/eeschema/annotate.cpp
index 1158e9cc32..cc01c24b50 100644
--- a/eeschema/annotate.cpp
+++ b/eeschema/annotate.cpp
@@ -9,7 +9,7 @@
/* fonctions exportees */
int ListeComposants( CmpListStruct* BaseListeCmp, SCH_SCREEN* screen, int NumSheet );
-int AnnotTriComposant( CmpListStruct* Objet1, CmpListStruct* Objet2 );
+int AnnotTriComposant( const void* o1, const void* o2 );
void BreakReference( CmpListStruct* BaseListeCmp, int NbOfCmp );
/* fonctions locales */
@@ -236,8 +236,7 @@ int ListeComposants( CmpListStruct* BaseListeCmp, SCH_SCREEN* screen, int NumShe
EDA_LibComponentStruct* Entry;
DrawList = screen->EEDrawList;
-
- while( DrawList )
+ for( ; DrawList; DrawList = DrawList->Pnext )
{
switch( DrawList->Type() )
{
@@ -253,20 +252,25 @@ int ListeComposants( CmpListStruct* BaseListeCmp, SCH_SCREEN* screen, int NumShe
Entry = FindLibPart( DrawLibItem->m_ChipName.GetData(), wxEmptyString, FIND_ROOT );
if( Entry == NULL )
break;
+
if( BaseListeCmp == NULL ) /* Items counting only */
{
- NbrCmp++; break;
+ NbrCmp++;
+ break;
}
+
BaseListeCmp[NbrCmp].m_Cmp = DrawLibItem;
BaseListeCmp[NbrCmp].m_NbParts = Entry->m_UnitCount;
BaseListeCmp[NbrCmp].m_Unit = DrawLibItem->m_Multi;
BaseListeCmp[NbrCmp].m_PartsLocked = Entry->m_UnitSelectionLocked;
BaseListeCmp[NbrCmp].m_Sheet = NumSheet;
BaseListeCmp[NbrCmp].m_IsNew = FALSE;
- BaseListeCmp[NbrCmp].m_Pos = DrawLibItem->m_Pos;
- BaseListeCmp[NbrCmp].m_TimeStamp = DrawLibItem->m_TimeStamp;
+ BaseListeCmp[NbrCmp].m_Pos = DrawLibItem->m_Pos;
+ BaseListeCmp[NbrCmp].m_TimeStamp = DrawLibItem->m_TimeStamp;
+
if( DrawLibItem->m_Field[REFERENCE].m_Text.IsEmpty() )
DrawLibItem->m_Field[REFERENCE].m_Text = wxT( "DefRef?" );
+
strncpy( BaseListeCmp[NbrCmp].m_TextRef,
CONV_TO_UTF8( DrawLibItem->m_Field[REFERENCE].m_Text ), 32 );
@@ -274,6 +278,7 @@ int ListeComposants( CmpListStruct* BaseListeCmp, SCH_SCREEN* screen, int NumShe
if( DrawLibItem->m_Field[VALUE].m_Text.IsEmpty() )
DrawLibItem->m_Field[VALUE].m_Text = wxT( "~" );
+
strncpy( BaseListeCmp[NbrCmp].m_TextValue,
CONV_TO_UTF8( DrawLibItem->m_Field[VALUE].m_Text ), 32 );
NbrCmp++;
@@ -291,8 +296,6 @@ int ListeComposants( CmpListStruct* BaseListeCmp, SCH_SCREEN* screen, int NumShe
default:
break;
}
-
- DrawList = DrawList->Pnext;
}
return NbrCmp;
@@ -300,7 +303,7 @@ int ListeComposants( CmpListStruct* BaseListeCmp, SCH_SCREEN* screen, int NumShe
/*****************************************************************/
-int AnnotTriComposant( CmpListStruct* Objet1, CmpListStruct* Objet2 )
+int AnnotTriComposant( const void* o1, const void* o2 )
/****************************************************************/
/* function used par qsort() for sorting the list
@@ -312,9 +315,11 @@ int AnnotTriComposant( CmpListStruct* Objet1, CmpListStruct* Objet2 )
* if same sheet, by time stamp
**/
{
- int ii;
+ CmpListStruct* Objet1 = (CmpListStruct*) o1;
+ CmpListStruct* Objet2 = (CmpListStruct*) o2;
- ii = strnicmp( Objet1->m_TextRef, Objet2->m_TextRef, 32 );
+ int ii = strnicmp( Objet1->m_TextRef, Objet2->m_TextRef, 32 );
+
if( SortByPosition == TRUE )
{
if( ii == 0 )
@@ -401,7 +406,8 @@ void BreakReference( CmpListStruct* BaseListeCmp, int NbOfCmp )
BaseListeCmp[ii].m_IsNew = TRUE;
if( !BaseListeCmp[ii].m_PartsLocked )
BaseListeCmp[ii].m_Unit = 0x7FFFFFFF;
- Text[ll] = 0; continue;
+ Text[ll] = 0;
+ continue;
}
if( isdigit( Text[ll] ) == 0 )
@@ -646,7 +652,8 @@ int CheckAnnotate( WinEDA_SchematicFrame* frame, bool OneSheetOnly )
/* 2eme passe : Remplissage du tableau des caracteristiques */
if( OneSheetOnly == 0 )
{
- ii = 0; screen = ScreenSch;
+ ii = 0;
+ screen = ScreenSch;
for( screen = ScreenList.GetFirst(); screen != NULL; screen = ScreenList.GetNext() )
{
ii += ListeComposants( ListeCmp + ii, screen, NumSheet );
@@ -658,9 +665,7 @@ int CheckAnnotate( WinEDA_SchematicFrame* frame, bool OneSheetOnly )
ListeComposants( ListeCmp, screen, NumSheet );
}
- qsort( ListeCmp, NbOfCmp, sizeof(CmpListStruct),
- ( int( * ) ( const void*, const void* ) )AnnotTriComposant );
-
+ qsort( ListeCmp, NbOfCmp, sizeof(CmpListStruct), AnnotTriComposant );
/* Separation des Numeros de la reference: IC1 -> IC, et 1 dans .m_NumRef */
BreakReference( ListeCmp, NbOfCmp );
@@ -669,13 +674,16 @@ int CheckAnnotate( WinEDA_SchematicFrame* frame, bool OneSheetOnly )
error = 0;
for( ii = 0; ii < NbOfCmp - 1; ii++ )
{
- msg.Empty(); Buff.Empty();
+ msg.Empty();
+ Buff.Empty();
+
if( ListeCmp[ii].m_IsNew )
{
if( ListeCmp[ii].m_NumRef >= 0 )
Buff << ListeCmp[ii].m_NumRef;
else
Buff = wxT( "?" );
+
cmpref = CONV_FROM_UTF8( ListeCmp[ii].m_TextRef );
msg.Printf( _( "item not annotated: %s%s" ), cmpref.GetData(), Buff.GetData() );
@@ -685,7 +693,8 @@ int CheckAnnotate( WinEDA_SchematicFrame* frame, bool OneSheetOnly )
msg << Buff;
}
DisplayError( NULL, msg );
- error++; break;
+ error++;
+ break;
}
if( MAX( ListeCmp[ii].m_NbParts, 1 ) < ListeCmp[ii].m_Unit ) // Annotate error
@@ -702,24 +711,27 @@ int CheckAnnotate( WinEDA_SchematicFrame* frame, bool OneSheetOnly )
ListeCmp[ii].m_Unit, ListeCmp[ii].m_NbParts );
msg << Buff;
DisplayError( frame, msg );
- error++; break;
+ error++;
+ break;
}
}
if( error )
return error;
- /* comptage des elements doublés (si tous sont annotés) */
+ // count the duplicated elements (if all are annotated)
for( ii = 0; (ii < NbOfCmp - 1) && (error < 4); ii++ )
{
- msg.Empty(); Buff.Empty();
+ msg.Empty();
+ Buff.Empty();
+
if( (stricmp( ListeCmp[ii].m_TextRef, ListeCmp[ii + 1].m_TextRef ) != 0)
|| ( ListeCmp[ii].m_NumRef != ListeCmp[ii + 1].m_NumRef ) )
continue;
/* Meme reference trouvée */
/* Il y a erreur si meme unite */
- if( ListeCmp[ii].m_Unit == ListeCmp[ii + 1].m_Unit )
+ if( ListeCmp[ii].m_Unit == ListeCmp[ii+1].m_Unit )
{
if( ListeCmp[ii].m_NumRef >= 0 )
Buff << ListeCmp[ii].m_NumRef;
@@ -736,7 +748,8 @@ int CheckAnnotate( WinEDA_SchematicFrame* frame, bool OneSheetOnly )
msg << Buff;
}
DisplayError( frame, msg );
- error++; continue;
+ error++;
+ continue;
}
/* Il y a erreur si unites differentes mais nombre de parts differentes
@@ -771,9 +784,9 @@ int CheckAnnotate( WinEDA_SchematicFrame* frame, bool OneSheetOnly )
nextcmpvalue = CONV_FROM_UTF8( ListeCmp[ii + 1].m_TextValue );
msg.Printf( _( "Diff values for %s%d%c (%s) and %s%d%c (%s)" ),
cmpref.GetData(), ListeCmp[ii].m_NumRef, ListeCmp[ii].m_Unit + 'A' - 1,
- cmpvalue.GetData(),
- nextcmpref.GetData(
- ), ListeCmp[ii + 1].m_NumRef, ListeCmp[ii + 1].m_Unit + 'A' - 1,
+ cmpvalue.GetData(), nextcmpref.GetData(),
+ ListeCmp[ii + 1].m_NumRef,
+ ListeCmp[ii + 1].m_Unit + 'A' - 1,
nextcmpvalue.GetData() );
DisplayError( frame, msg );
diff --git a/eeschema/component_class.cpp b/eeschema/component_class.cpp
index 1abf758df3..f504caccaf 100644
--- a/eeschema/component_class.cpp
+++ b/eeschema/component_class.cpp
@@ -49,21 +49,21 @@ const wxString& ReturnDefaultFieldName( int aFieldNdx )
* for I18n
*/
{
- // avoid unnecessarily copying wxStrings.
+ // avoid unnecessarily copying wxStrings at runtime.
static const wxString FieldDefaultNameList[] = {
- _( "Ref" ), /* Reference of part, i.e. "IC21" */
- _( "Value" ), /* Value of part, i.e. "3.3K" */
- _( "Footprint" ), /* Footprint, used by cvpcb or pcbnew, i.e. "16DIP300" */
- _( "Sheet" ), /* for components which are a schematic file, schematic file name, i.e. "cnt16.sch" */
- _( "Field1" ), /* User fields (1 to n) have an editable name*/
- _( "Field2" ),
- _( "Field3" ),
- _( "Field4" ),
- _( "Field5" ),
- _( "Field6" ),
- _( "Field7" ),
- _( "Field8" ),
- wxT( "badFieldNdx!" ) // error, and "sentinel" value
+ _( "Ref" ), /* Reference of part, i.e. "IC21" */
+ _( "Value" ), /* Value of part, i.e. "3.3K" */
+ _( "Footprint" ), /* Footprint, used by cvpcb or pcbnew, i.e. "16DIP300" */
+ _( "Sheet" ), /* for components which are a schematic file, schematic file name, i.e. "cnt16.sch" */
+ wxString(_( "Field" ))+wxT("1"),
+ wxString(_( "Field" ))+wxT("2"),
+ wxString(_( "Field" ))+wxT("3"),
+ wxString(_( "Field" ))+wxT("4"),
+ wxString(_( "Field" ))+wxT("5"),
+ wxString(_( "Field" ))+wxT("6"),
+ wxString(_( "Field" ))+wxT("7"),
+ wxString(_( "Field" ))+wxT("8"),
+ wxT( "badFieldNdx!" ) // error, and "sentinel" value
};
if( (unsigned) aFieldNdx > FIELD8 ) // catches < 0 also
diff --git a/eeschema/eelibs_draw_components.cpp b/eeschema/eelibs_draw_components.cpp
index 32cbbeb140..1734b3b6df 100644
--- a/eeschema/eelibs_draw_components.cpp
+++ b/eeschema/eelibs_draw_components.cpp
@@ -348,7 +348,7 @@ EDA_LibComponentStruct* FindLibPart( const wxChar* Name, const wxString& LibName
{
EDA_LibComponentStruct* Entry;
- static EDA_LibComponentStruct DummyEntry( wxEmptyString );/* Used only to call PQFind. */
+ static EDA_LibComponentStruct DummyEntry( wxEmptyString ); /* Used only to call PQFind. */
LibraryStruct* Lib = g_LibraryList;
@@ -357,24 +357,30 @@ EDA_LibComponentStruct* FindLibPart( const wxChar* Name, const wxString& LibName
PQCompFunc( (PQCompFuncType) LibraryEntryCompare );
- Entry = NULL; FindLibName.Empty();
+ Entry = NULL;
+ FindLibName.Empty();
+
while( Lib )
{
if( !LibName.IsEmpty() )
{
if( Lib->m_Name != LibName )
{
- Lib = Lib->m_Pnext; continue;
+ Lib = Lib->m_Pnext;
+ continue;
}
}
+
if( Lib == NULL )
break;
+
Entry = (EDA_LibComponentStruct*) PQFind( Lib->m_Entries, &DummyEntry );
if( Entry != NULL )
{
FindLibName = Lib->m_Name;
break;
}
+
Lib = Lib->m_Pnext;
}
@@ -425,11 +431,13 @@ void DrawLibPartAux( WinEDA_DrawPanel* panel, wxDC* DC,
/* Elimination des elements non relatifs a l'unite */
if( Multi && DEntry->m_Unit && (DEntry->m_Unit != Multi) )
continue;
+
if( convert && DEntry->m_Convert && (DEntry->m_Convert != convert) )
continue;
if( DEntry->m_Flags & IS_MOVED )
continue; // Element en deplacement non trace
+
SetHightColor = (DEntry->m_Selected & IS_SELECTED) ? HIGHT_LIGHT_FLAG : 0;
LineWidth = MAX( DEntry->m_Width, g_DrawMinimunLineWidth );
@@ -494,10 +502,12 @@ void DrawLibPartAux( WinEDA_DrawPanel* panel, wxDC* DC,
{
LibDrawCircle* Circle = (LibDrawCircle*) DEntry;
CharColor = GETCOLOR( LAYER_DEVICE );
+
x1 = Pos.x + TransMat[0][0] * Circle->m_Pos.x +
TransMat[0][1] * Circle->m_Pos.y;
y1 = Pos.y + TransMat[1][0] * Circle->m_Pos.x +
TransMat[1][1] * Circle->m_Pos.y;
+
fill_option = Circle->m_Fill & (~g_PrintFillMask);
if( Color < 0 )
{
@@ -526,10 +536,12 @@ void DrawLibPartAux( WinEDA_DrawPanel* panel, wxDC* DC,
/* The text orientation may need to be flipped if the
* transformation matrix cuases xy axes to be flipped. */
t1 = (TransMat[0][0] != 0) ^ (Text->m_Horiz != 0);
+
x1 = Pos.x + TransMat[0][0] * Text->m_Pos.x
+ TransMat[0][1] * Text->m_Pos.y;
y1 = Pos.y + TransMat[1][0] * Text->m_Pos.x
+ TransMat[1][1] * Text->m_Pos.y;
+
DrawGraphicText( panel, DC, wxPoint( x1, y1 ), CharColor, Text->m_Text,
t1 ? TEXT_ORIENT_HORIZ : TEXT_ORIENT_VERT,
Text->m_Size,
@@ -579,6 +591,7 @@ void DrawLibPartAux( WinEDA_DrawPanel* panel, wxDC* DC,
&& !g_ShowAllPins )
break;
}
+
/* Calcul de l'orientation reelle de la Pin */
orient = Pin->ReturnPinDrawOrient( TransMat );
diff --git a/eeschema/fieldedi.cpp b/eeschema/fieldedi.cpp
deleted file mode 100644
index 50da1e266a..0000000000
--- a/eeschema/fieldedi.cpp
+++ /dev/null
@@ -1,1118 +0,0 @@
-/*********************************************************************/
-/* 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;
-}
-
diff --git a/eeschema/fieldedi.cpp.notused b/eeschema/fieldedi.cpp.notused
new file mode 100644
index 0000000000..033477fc5d
--- /dev/null
+++ b/eeschema/fieldedi.cpp.notused
@@ -0,0 +1,1230 @@
+/*********************************************************************/
+/* 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;
+}
diff --git a/eeschema/netlist.cpp b/eeschema/netlist.cpp
index 676570fad8..7b340e60c9 100644
--- a/eeschema/netlist.cpp
+++ b/eeschema/netlist.cpp
@@ -36,6 +36,61 @@ static int LastNetCode, LastBusNetCode;
static int s_PassNumber;
+#if defined(DEBUG)
+
+const char* ShowType( NetObjetType aType )
+{
+ const char* ret;
+
+ switch( aType )
+ {
+ case NET_SEGMENT: ret = "segment"; break;
+ case NET_BUS: ret = "bus"; break;
+ case NET_JONCTION: ret = "junction"; break;
+ case NET_LABEL: ret = "label"; break;
+ case NET_GLOBLABEL: ret = "glabel"; break;
+ case NET_BUSLABELMEMBER: ret = "buslblmember"; break;
+ case NET_GLOBBUSLABELMEMBER: ret = "gbuslblmember"; break;
+ case NET_SHEETBUSLABELMEMBER: ret = "sbuslblmember"; break;
+ case NET_SHEETLABEL: ret = "sheetlabel"; break;
+ case NET_PINLABEL: ret = "pinlabel"; break;
+ case NET_PIN: ret = "pin"; break;
+ case NET_NOCONNECT: ret = "noconnect"; break;
+ default: ret = "??"; break;
+ }
+ return ret;
+}
+
+
+void ObjetNetListStruct::Show( std::ostream& out, int ndx )
+{
+ out << "\n";
+
+ out << " \n";
+
+ if( m_Label )
+ out << " \n";
+
+ if( m_Comp )
+ m_Comp->Show( 1, out );
+
+ out << "\n";
+}
+
+void dumpNetTable()
+{
+ for( int i=0; im_Drawings;
- for( ; DEntry != NULL; DEntry = DEntry->Next() )
+ for( ; DEntry; DEntry = DEntry->Next() )
{
LibDrawPin* Pin = (LibDrawPin*) DEntry;
if( DEntry->Type() != COMPONENT_PIN_DRAW_TYPE )
@@ -534,7 +608,7 @@ static int ListeObjetConnection( WinEDA_SchematicFrame* frame, SCH_SCREEN* scree
ObjNet[NbrItem].m_SheetNumber = NumSheet;
ObjNet[NbrItem].m_Start.x = x2;
ObjNet[NbrItem].m_Start.y = y2;
- ObjNet[NbrItem].m_End = ObjNet[NbrItem].m_Start;
+ ObjNet[NbrItem].m_End = ObjNet[NbrItem].m_Start;
}
NbrItem++;
@@ -551,7 +625,7 @@ static int ListeObjetConnection( WinEDA_SchematicFrame* frame, SCH_SCREEN* scree
ObjNet[NbrItem].m_Label = &Pin->m_PinName;
ObjNet[NbrItem].m_Start.x = x2;
ObjNet[NbrItem].m_Start.y = y2;
- ObjNet[NbrItem].m_End = ObjNet[NbrItem].m_Start;
+ ObjNet[NbrItem].m_End = ObjNet[NbrItem].m_Start;
}
NbrItem++;
}
@@ -763,6 +837,7 @@ static int ConvertBusToMembers( ObjetNetListStruct* BusLabel )
/* Convertion du BusLabel en la racine du Label + le numero du fil */
BufLine = BusLabel->m_Label->Left( RootBusNameLength );
+
BusMember = FirstNumWireBus;
BufLine << BusMember;
BusLabel->m_Label = new wxString( BufLine );
@@ -772,7 +847,9 @@ static int ConvertBusToMembers( ObjetNetListStruct* BusLabel )
for( BusMember++; BusMember <= LastNumWireBus; BusMember++ )
{
- *(BusLabel + 1) = *BusLabel; BusLabel++; NumItem++;
+ *(BusLabel + 1) = *BusLabel;
+ BusLabel++;
+ NumItem++;
/* Convertion du BusLabel en la racine du Label + le numero du fil */
BufLine = BusLabel->m_Label->Left( RootBusNameLength );
@@ -849,18 +926,18 @@ static void PointToPointConnect( ObjetNetListStruct* Ref, int IsBus, int start )
* ( il ne peut y avoir connexion physique entre elements de differentes sheets)
*/
{
- int i, NetCode;
- ObjetNetListStruct* Point = g_TabObjNet;
+ int i, netCode;
+ ObjetNetListStruct* netTable = g_TabObjNet;
if( IsBus == 0 ) /* Objets autres que BUS et BUSLABELS */
{
- NetCode = Ref->m_NetCode;
+ netCode = Ref->m_NetCode;
for( i = start; i < g_NbrObjNet; i++ )
{
- if( Point[i].m_SheetNumber > Ref->m_SheetNumber )
+ if( netTable[i].m_SheetNumber > Ref->m_SheetNumber )
break;
- switch( Point[i].m_Type )
+ switch( netTable[i].m_Type )
{
case NET_SEGMENT:
case NET_PIN:
@@ -870,18 +947,15 @@ static void PointToPointConnect( ObjetNetListStruct* Ref, int IsBus, int start )
case NET_PINLABEL:
case NET_JONCTION:
case NET_NOCONNECT:
- if( ( ( (Ref->m_Start.x == Point[i].m_Start.x) &&
- (Ref->m_Start.y == Point[i].m_Start.y) ) )
- || ( ( (Ref->m_Start.x == Point[i].m_End.x) &&
- (Ref->m_Start.y == Point[i].m_End.y) ) )
- || ( ( (Ref->m_End.x == Point[i].m_Start.x) &&
- (Ref->m_End.y == Point[i].m_Start.y) ) )
- || ( ( (Ref->m_End.x == Point[i].m_End.x) && (Ref->m_End.y == Point[i].m_End.y) ) ) )
+ if( Ref->m_Start == netTable[i].m_Start
+ || Ref->m_Start == netTable[i].m_End
+ || Ref->m_End == netTable[i].m_Start
+ || Ref->m_End == netTable[i].m_End )
{
- if( Point[i].m_NetCode == 0 )
- Point[i].m_NetCode = NetCode;
+ if( netTable[i].m_NetCode == 0 )
+ netTable[i].m_NetCode = netCode;
else
- PropageNetCode( Point[i].m_NetCode, NetCode, 0 );
+ PropageNetCode( netTable[i].m_NetCode, netCode, 0 );
}
break;
@@ -893,15 +967,16 @@ static void PointToPointConnect( ObjetNetListStruct* Ref, int IsBus, int start )
}
}
}
+
else /* Objets type BUS et BUSLABELS ( et JONCTIONS )*/
{
- NetCode = Ref->m_BusNetCode;
- for( i = start; i < g_NbrObjNet; i++ )
+ netCode = Ref->m_BusNetCode;
+ for( i = start; i Ref->m_SheetNumber )
+ if( netTable[i].m_SheetNumber > Ref->m_SheetNumber )
break;
- switch( Point[i].m_Type )
+ switch( netTable[i].m_Type )
{
case NET_SEGMENT:
case NET_PIN:
@@ -917,18 +992,15 @@ static void PointToPointConnect( ObjetNetListStruct* Ref, int IsBus, int start )
case NET_SHEETBUSLABELMEMBER:
case NET_GLOBBUSLABELMEMBER:
case NET_JONCTION:
- if( ( ( (Ref->m_Start.x == Point[i].m_Start.x) &&
- (Ref->m_Start.y == Point[i].m_Start.y) ) )
- || ( ( (Ref->m_Start.x == Point[i].m_End.x) &&
- (Ref->m_Start.y == Point[i].m_End.y) ) )
- || ( ( (Ref->m_End.x == Point[i].m_Start.x) &&
- (Ref->m_End.y == Point[i].m_Start.y) ) )
- || ( ( (Ref->m_End.x == Point[i].m_End.x) && (Ref->m_End.y == Point[i].m_End.y) ) ) )
+ if( Ref->m_Start == netTable[i].m_Start
+ || Ref->m_Start == netTable[i].m_End
+ || Ref->m_End == netTable[i].m_Start
+ || Ref->m_End == netTable[i].m_End )
{
- if( Point[i].m_BusNetCode == 0 )
- Point[i].m_BusNetCode = NetCode;
+ if( netTable[i].m_BusNetCode == 0 )
+ netTable[i].m_BusNetCode = netCode;
else
- PropageNetCode( Point[i].m_BusNetCode, NetCode, 1 );
+ PropageNetCode( netTable[i].m_BusNetCode, netCode, 1 );
}
break;
}
@@ -998,46 +1070,42 @@ static void SegmentToPointConnect( ObjetNetListStruct* Jonction,
/*****************************************************************
- * Routine qui connecte les groupes d'objets si labels identiques *
+ * Function which connects the groups of object which have the same label
*******************************************************************/
static void LabelConnection( ObjetNetListStruct* LabelRef )
{
- int i, NetCode;
- ObjetNetListStruct* ObjetNet;
-
if( LabelRef->m_NetCode == 0 )
return;
- ObjetNet = g_TabObjNet;
+ ObjetNetListStruct* netTable = g_TabObjNet;
- for( i = 0; i < g_NbrObjNet; i++ )
+ for( int i=0; im_NetCode )
+ if( netTable[i].m_NetCode == LabelRef->m_NetCode )
continue;
- if( ObjetNet[i].m_SheetNumber != LabelRef->m_SheetNumber )
+ if( netTable[i].m_SheetNumber != LabelRef->m_SheetNumber )
{
- if( ObjetNet[i].m_Type != NET_PINLABEL )
+ if( netTable[i].m_Type != NET_PINLABEL )
continue;
}
- if( (ObjetNet[i].m_Type == NET_LABEL )
- || (ObjetNet[i].m_Type == NET_GLOBLABEL )
- || (ObjetNet[i].m_Type == NET_BUSLABELMEMBER )
- || (ObjetNet[i].m_Type == NET_GLOBBUSLABELMEMBER )
- || (ObjetNet[i].m_Type == NET_PINLABEL ) )
+ if( netTable[i].m_Type == NET_LABEL
+ || netTable[i].m_Type == NET_GLOBLABEL
+ || netTable[i].m_Type == NET_BUSLABELMEMBER
+ || netTable[i].m_Type == NET_GLOBBUSLABELMEMBER
+ || netTable[i].m_Type == NET_PINLABEL )
{
- if( ObjetNet[i].m_Label->CmpNoCase( *LabelRef->m_Label ) != 0 )
+ if( netTable[i].m_Label->CmpNoCase( *LabelRef->m_Label ) != 0 )
continue;
/* Ici 2 labels identiques */
/* Propagation du Netcode a tous les Objets de meme NetCode */
- if( ObjetNet[i].m_NetCode )
- PropageNetCode( ObjetNet[i].m_NetCode, LabelRef->m_NetCode, 0 );
+ if( netTable[i].m_NetCode )
+ PropageNetCode( netTable[i].m_NetCode, LabelRef->m_NetCode, 0 );
else
- ObjetNet[i].m_NetCode = LabelRef->m_NetCode;
+ netTable[i].m_NetCode = LabelRef->m_NetCode;
}
}
}
diff --git a/eeschema/netlist.h b/eeschema/netlist.h
index d9dc6d1244..32b4d8d361 100644
--- a/eeschema/netlist.h
+++ b/eeschema/netlist.h
@@ -36,7 +36,7 @@ typedef enum {
/* Max pin number per component and footprint */
#define MAXPIN 5000
-typedef enum { /* Type des objets de Net */
+enum NetObjetType { /* Type des objets de Net */
NET_SEGMENT,
NET_BUS,
NET_JONCTION,
@@ -49,20 +49,21 @@ typedef enum { /* Type des objets de Net */
NET_PINLABEL,
NET_PIN,
NET_NOCONNECT
-} NetObjetType;
+};
-typedef enum { /* Valeur du Flag de connection */
+
+enum IsConnectType { /* Valeur du Flag de connection */
UNCONNECT, /* Pin ou Label non connecte */
NOCONNECT, /* Pin volontairement non connectee (Symb. NoConnect utilise) */
CONNECT /* connexion normale */
-} IsConnectType;
+};
/* Structure decrivant 1 element de connexion (pour netlist ) */
class ObjetNetListStruct
{
public:
- void* m_Comp; /* Pointeur sur la definition de l'objet */
+ EDA_BaseStruct* m_Comp; /* Pointeur sur la definition de l'objet */
void* m_Link; /* Pour SheetLabelStruct: Pointeur sur la feuille de hierarchie
* Pour les Pins: pointeur sur le composant */
int m_Flag; /* flag pour calculs internes */
@@ -79,6 +80,11 @@ public:
long m_PinNum; /* numero de pin( 4 octets -> 4 codes ascii) */
const wxString* m_Label; /* Tous types Labels:pointeur sur la wxString definissant le label */
wxPoint m_Start, m_End;
+
+#if defined(DEBUG)
+ void Show( std::ostream& out, int ndx );
+#endif
+
};