1104 lines
33 KiB
C++
1104 lines
33 KiB
C++
|
/**************************************************************/
|
|||
|
/* librairy editor: edition of component general properties */
|
|||
|
/**************************************************************/
|
|||
|
|
|||
|
#include "fctsys.h"
|
|||
|
#include "gr_basic.h"
|
|||
|
|
|||
|
#include "common.h"
|
|||
|
#include "program.h"
|
|||
|
#include "libcmp.h"
|
|||
|
#include "general.h"
|
|||
|
|
|||
|
#include "protos.h"
|
|||
|
|
|||
|
enum id_libedit {
|
|||
|
ID_PANEL_ALIAS,
|
|||
|
ID_PANEL_FIELD,
|
|||
|
ID_COPY_DOC_TO_ALIAS,
|
|||
|
ID_BROWSE_DOC_FILES,
|
|||
|
ID_ADD_ALIAS,
|
|||
|
ID_DELETE_ONE_ALIAS,
|
|||
|
ID_DELETE_ALL_ALIAS,
|
|||
|
ID_ON_SELECT_FIELD
|
|||
|
};
|
|||
|
|
|||
|
|
|||
|
|
|||
|
/* Routines locales */
|
|||
|
|
|||
|
/* Variables locales */
|
|||
|
extern int CurrentUnit;
|
|||
|
|
|||
|
/* Classe de la frame des propri<72>t<EFBFBD>s d'un composant en librairie */
|
|||
|
|
|||
|
/* Cette classe genere une fenetre type NoteBook, pour l'edition des propri<72>t<EFBFBD>s
|
|||
|
d'un composant le librairie.
|
|||
|
On peut <EFBFBD>diter:
|
|||
|
Texte dimensions et justification de tous les champs (Ref, Val, et autres champs)
|
|||
|
Documentation et mots clefs
|
|||
|
Nombre de part par boitier
|
|||
|
et autres propri<EFBFBD>r<EFBFBD>s g<EFBFBD>n<EFBFBD>rales
|
|||
|
*/
|
|||
|
|
|||
|
#include "dialog_edit_component_in_lib.cpp"
|
|||
|
|
|||
|
|
|||
|
/*****************************************************************/
|
|||
|
void WinEDA_LibeditFrame::InstallLibeditFrame(const wxPoint & pos)
|
|||
|
/*****************************************************************/
|
|||
|
{
|
|||
|
wxPoint fpos = pos;
|
|||
|
|
|||
|
WinEDA_PartPropertiesFrame * frame =
|
|||
|
new WinEDA_PartPropertiesFrame(this);
|
|||
|
int IsModified = frame->ShowModal(); frame->Destroy();
|
|||
|
if ( IsModified ) Refresh();
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
/***************************************************************************/
|
|||
|
void WinEDA_PartPropertiesFrame::CopyFieldDataToBuffer(LibDrawField * Field)
|
|||
|
/***************************************************************************/
|
|||
|
/* copy the field data (name, attributes, size, position... to corresponding buffers
|
|||
|
for editing
|
|||
|
*/
|
|||
|
{
|
|||
|
int id = Field->m_FieldId;
|
|||
|
|
|||
|
m_FieldFlags[id] = (Field->m_Attributs & TEXT_NO_VISIBLE) ? 0 : 1;
|
|||
|
m_FieldOrient[id] = Field->m_Orient;
|
|||
|
|
|||
|
if ( Field->m_HJustify == GR_TEXT_HJUSTIFY_LEFT)
|
|||
|
m_FieldHJustify[id] = 0;
|
|||
|
else if ( Field->m_HJustify == GR_TEXT_HJUSTIFY_RIGHT)
|
|||
|
m_FieldHJustify[id] = 2;
|
|||
|
else
|
|||
|
m_FieldHJustify[id] = 1;
|
|||
|
|
|||
|
if ( Field->m_VJustify == GR_TEXT_VJUSTIFY_BOTTOM)
|
|||
|
m_FieldVJustify[id] = 0;
|
|||
|
else if ( Field->m_VJustify == GR_TEXT_VJUSTIFY_TOP)
|
|||
|
m_FieldVJustify[id] = 2;
|
|||
|
else m_FieldVJustify[id] = 1;
|
|||
|
|
|||
|
m_FieldText[id] = Field->m_Text;
|
|||
|
if ( id >= FIELD1 ) m_FieldName[id] = Field->m_Name;
|
|||
|
m_FieldPosition[id] = Field->m_Pos;
|
|||
|
// Note: the Y axis for components in lib is from bottom to top
|
|||
|
// and the screen axis is top to bottom: we must change the y coord sign for editing
|
|||
|
m_FieldPosition[id].y = - m_FieldPosition[id].y;
|
|||
|
m_FieldSize[id] = Field->m_Size.x;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/***************************************************************************/
|
|||
|
void WinEDA_PartPropertiesFrame::CopyBufferToFieldData(LibDrawField * Field)
|
|||
|
/***************************************************************************/
|
|||
|
/* Copy data from buffers(name, attributes, size, position... )to the
|
|||
|
field "Field"
|
|||
|
*/
|
|||
|
{
|
|||
|
int hjustify[3] = { GR_TEXT_HJUSTIFY_LEFT , GR_TEXT_HJUSTIFY_CENTER,
|
|||
|
GR_TEXT_HJUSTIFY_RIGHT };
|
|||
|
int vjustify[3] = { GR_TEXT_VJUSTIFY_BOTTOM , GR_TEXT_VJUSTIFY_CENTER,
|
|||
|
GR_TEXT_VJUSTIFY_TOP };
|
|||
|
int ii = Field->m_FieldId;
|
|||
|
|
|||
|
Field->m_Text = m_FieldText[ii];
|
|||
|
|
|||
|
if ( ii >= FIELD1 && m_FieldName[ii] != ReturnDefaultFieldName(ii) )
|
|||
|
Field->m_Name = m_FieldName[ii];
|
|||
|
else Field->m_Name.Empty();
|
|||
|
|
|||
|
Field->m_Size.x = Field->m_Size.y = m_FieldSize[ii];
|
|||
|
Field->m_HJustify = hjustify[m_FieldHJustify[ii]];
|
|||
|
Field->m_VJustify = vjustify[m_FieldVJustify[ii]];
|
|||
|
if ( m_FieldFlags[ii] )
|
|||
|
Field->m_Attributs &= ~TEXT_NO_VISIBLE;
|
|||
|
else
|
|||
|
Field->m_Attributs |= TEXT_NO_VISIBLE;
|
|||
|
Field->m_Orient = m_FieldOrient[ii] ? 1 : 0;
|
|||
|
Field->m_Pos = m_FieldPosition[ii];
|
|||
|
// Note: the Y axis for components in lib is from bottom to top
|
|||
|
// and the screen axis is top to bottom: we must change the y coord sign after editing
|
|||
|
Field->m_Pos.y = - Field->m_Pos.y;
|
|||
|
}
|
|||
|
|
|||
|
/*****************************************************/
|
|||
|
void WinEDA_PartPropertiesFrame::InitBuffers(void)
|
|||
|
/*****************************************************/
|
|||
|
/* Init the buffers to a default value,
|
|||
|
or to values from CurrentLibEntry if CurrentLibEntry != NULL
|
|||
|
*/
|
|||
|
{
|
|||
|
int ii;
|
|||
|
|
|||
|
m_CurrentFieldId = REFERENCE;
|
|||
|
|
|||
|
for ( ii = 0; ii < NUMBER_OF_FIELDS; ii++ )
|
|||
|
{
|
|||
|
if ( ii < FIELD1 )
|
|||
|
m_FieldName[ii] = ReturnDefaultFieldName(ii);
|
|||
|
m_FieldFlags[ii] = 1;
|
|||
|
m_FieldOrient[ii] = 0;
|
|||
|
m_FieldSize[ii] = DEFAULT_TEXT_SIZE;
|
|||
|
m_FieldHJustify[ii] = 1;
|
|||
|
m_FieldVJustify[ii] = 1;
|
|||
|
}
|
|||
|
|
|||
|
m_AliasLocation = -1;
|
|||
|
if ( CurrentLibEntry == NULL )
|
|||
|
{
|
|||
|
m_Title = _("Lib Component Properties");
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
wxString msg_text = _("Properties for ");
|
|||
|
if ( ! CurrentAliasName.IsEmpty() )
|
|||
|
{
|
|||
|
m_AliasLocation = LocateAlias( CurrentLibEntry->m_AliasList, CurrentAliasName);
|
|||
|
m_Title = msg_text + CurrentAliasName +
|
|||
|
_("(alias of ") +
|
|||
|
wxString(CurrentLibEntry->m_Name.m_Text)
|
|||
|
+ wxT(")");
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
m_Title = msg_text + CurrentLibEntry->m_Name.m_Text;
|
|||
|
CurrentAliasName.Empty();
|
|||
|
}
|
|||
|
|
|||
|
CopyFieldDataToBuffer(& CurrentLibEntry->m_Prefix);
|
|||
|
CopyFieldDataToBuffer(& CurrentLibEntry->m_Name);
|
|||
|
|
|||
|
LibDrawField * Field = CurrentLibEntry->Fields;
|
|||
|
while ( Field )
|
|||
|
{
|
|||
|
CopyFieldDataToBuffer(Field);
|
|||
|
Field = (LibDrawField*)Field->Pnext;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/*****************************************************/
|
|||
|
void WinEDA_PartPropertiesFrame::BuildPanelAlias(void)
|
|||
|
/*****************************************************/
|
|||
|
/* create the panel for component alias list editing
|
|||
|
*/
|
|||
|
{
|
|||
|
wxButton * Button;
|
|||
|
|
|||
|
m_PanelAlias->SetFont(*g_DialogFont);
|
|||
|
wxBoxSizer * PanelAliasBoxSizer = new wxBoxSizer(wxHORIZONTAL);
|
|||
|
m_PanelAlias->SetSizer(PanelAliasBoxSizer);
|
|||
|
wxBoxSizer * LeftBoxSizer = new wxBoxSizer(wxVERTICAL);
|
|||
|
PanelAliasBoxSizer->Add(LeftBoxSizer, 0 , wxGROW|wxALL, 5);
|
|||
|
|
|||
|
wxStaticText * Msg = new wxStaticText(m_PanelAlias, -1, _("Alias"));
|
|||
|
Msg->SetForegroundColour(wxColour(200,0,0) );
|
|||
|
LeftBoxSizer->Add(Msg, 0 , wxGROW|wxLEFT|wxRIGHT|wxTOP, 5);
|
|||
|
|
|||
|
m_PartAliasList = new wxListBox(m_PanelAlias,
|
|||
|
-1,
|
|||
|
wxDefaultPosition, wxSize(200,250),
|
|||
|
0,NULL,
|
|||
|
wxLB_ALWAYS_SB|wxLB_SINGLE);
|
|||
|
LeftBoxSizer->Add(m_PartAliasList, 0 , wxGROW|wxLEFT|wxRIGHT|wxBOTTOM, 5);
|
|||
|
|
|||
|
wxBoxSizer * RightBoxSizer = new wxBoxSizer(wxVERTICAL);
|
|||
|
PanelAliasBoxSizer->Add(RightBoxSizer, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
|
|||
|
|
|||
|
Button = new wxButton(m_PanelAlias, ID_ADD_ALIAS, _("Add"));
|
|||
|
Button->SetForegroundColour(*wxBLUE);
|
|||
|
RightBoxSizer->Add(Button, 0 , wxGROW|wxALL, 5);
|
|||
|
|
|||
|
m_ButtonDeleteOneAlias = new wxButton(m_PanelAlias, ID_DELETE_ONE_ALIAS,
|
|||
|
_("Delete"));
|
|||
|
m_ButtonDeleteOneAlias->SetForegroundColour(*wxRED);
|
|||
|
RightBoxSizer->Add(m_ButtonDeleteOneAlias, 0 , wxGROW|wxALL, 5);
|
|||
|
|
|||
|
m_ButtonDeleteAllAlias = new wxButton(m_PanelAlias, ID_DELETE_ALL_ALIAS,
|
|||
|
_("Delete All"));
|
|||
|
m_ButtonDeleteAllAlias->SetForegroundColour(*wxRED);
|
|||
|
if ( ! CurrentAliasName.IsEmpty() ) m_ButtonDeleteAllAlias->Enable(FALSE);
|
|||
|
RightBoxSizer->Add(m_ButtonDeleteAllAlias, 0 , wxGROW|wxALL, 5);
|
|||
|
|
|||
|
|
|||
|
/* lecture des noms des alias */
|
|||
|
if ( CurrentLibEntry )
|
|||
|
{
|
|||
|
for ( unsigned ii = 0; ii < CurrentLibEntry->m_AliasList.GetCount(); ii += ALIAS_NEXT)
|
|||
|
m_PartAliasList->Append(CurrentLibEntry->m_AliasList[ii+ALIAS_NAME]);
|
|||
|
}
|
|||
|
|
|||
|
if ( (CurrentLibEntry == NULL) || (CurrentLibEntry->m_AliasList.GetCount() == 0) )
|
|||
|
{
|
|||
|
m_ButtonDeleteAllAlias->Enable(FALSE);
|
|||
|
m_ButtonDeleteOneAlias->Enable(FALSE);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/*****************************************************************/
|
|||
|
void WinEDA_PartPropertiesFrame::BuildPanelFootprintFilter(void)
|
|||
|
/*****************************************************************/
|
|||
|
/* create the panel for footprint filtering in cvpcb list
|
|||
|
*/
|
|||
|
{
|
|||
|
|
|||
|
m_PanelFootprintFilter = new wxPanel( m_NoteBook, -1, wxDefaultPosition, wxDefaultSize, wxSUNKEN_BORDER|wxTAB_TRAVERSAL );
|
|||
|
m_NoteBook->AddPage(m_PanelFootprintFilter, _("Footprint Filter"));
|
|||
|
|
|||
|
m_PanelFootprintFilter->SetFont(*g_DialogFont);
|
|||
|
|
|||
|
wxBoxSizer * PanelFpFilterBoxSizer = new wxBoxSizer(wxHORIZONTAL);
|
|||
|
m_PanelFootprintFilter->SetSizer(PanelFpFilterBoxSizer);
|
|||
|
wxBoxSizer * LeftBoxSizer = new wxBoxSizer(wxVERTICAL);
|
|||
|
PanelFpFilterBoxSizer->Add(LeftBoxSizer, 0 , wxGROW|wxALL, 5);
|
|||
|
|
|||
|
wxStaticText * Msg = new wxStaticText(m_PanelFootprintFilter, -1, _("Footprints"));
|
|||
|
Msg->SetForegroundColour(wxColour(200,0,0) );
|
|||
|
LeftBoxSizer->Add(Msg, 0 , wxGROW|wxLEFT|wxRIGHT|wxTOP, 5);
|
|||
|
|
|||
|
m_FootprintFilterListBox = new wxListBox(m_PanelFootprintFilter,
|
|||
|
-1,
|
|||
|
wxDefaultPosition, wxSize(200,250),
|
|||
|
0,NULL,
|
|||
|
wxLB_ALWAYS_SB|wxLB_SINGLE);
|
|||
|
LeftBoxSizer->Add(m_FootprintFilterListBox, 0 , wxGROW|wxLEFT|wxRIGHT|wxBOTTOM, 5);
|
|||
|
|
|||
|
wxBoxSizer * RightBoxSizer = new wxBoxSizer(wxVERTICAL);
|
|||
|
PanelFpFilterBoxSizer->Add(RightBoxSizer, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
|
|||
|
|
|||
|
wxButton * Button = new wxButton(m_PanelFootprintFilter, ID_ADD_FOOTPRINT_FILTER, _("Add"));
|
|||
|
Button->SetForegroundColour(*wxBLUE);
|
|||
|
RightBoxSizer->Add(Button, 0 , wxGROW|wxALL, 5);
|
|||
|
|
|||
|
m_ButtonDeleteOneFootprintFilter = new wxButton(m_PanelFootprintFilter, ID_DELETE_ONE_FOOTPRINT_FILTER,
|
|||
|
_("Delete"));
|
|||
|
m_ButtonDeleteOneFootprintFilter->SetForegroundColour(*wxRED);
|
|||
|
RightBoxSizer->Add(m_ButtonDeleteOneFootprintFilter, 0 , wxGROW|wxALL, 5);
|
|||
|
|
|||
|
m_ButtonDeleteAllFootprintFilter = new wxButton(m_PanelFootprintFilter, ID_DELETE_ALL_FOOTPRINT_FILTER,
|
|||
|
_("Delete All"));
|
|||
|
m_ButtonDeleteAllFootprintFilter->SetForegroundColour(*wxRED);
|
|||
|
RightBoxSizer->Add(m_ButtonDeleteAllFootprintFilter, 0 , wxGROW|wxALL, 5);
|
|||
|
|
|||
|
|
|||
|
/* Read the Footprint Filter list */
|
|||
|
if ( CurrentLibEntry )
|
|||
|
{
|
|||
|
for ( unsigned ii = 0; ii < CurrentLibEntry->m_FootprintList.GetCount(); ii ++)
|
|||
|
m_FootprintFilterListBox->Append(CurrentLibEntry->m_FootprintList[ii]);
|
|||
|
}
|
|||
|
|
|||
|
if ( (CurrentLibEntry == NULL) || (CurrentLibEntry->m_FootprintList.GetCount() == 0) )
|
|||
|
{
|
|||
|
m_ButtonDeleteAllFootprintFilter->Enable(FALSE);
|
|||
|
m_ButtonDeleteOneFootprintFilter->Enable(FALSE);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
/*****************************************************/
|
|||
|
void WinEDA_PartPropertiesFrame::BuildPanelDoc(void)
|
|||
|
/*****************************************************/
|
|||
|
/* create the panel for component doc editing
|
|||
|
*/
|
|||
|
{
|
|||
|
wxString msg_text;
|
|||
|
|
|||
|
if ( m_AliasLocation >= 0 )
|
|||
|
msg_text = CurrentLibEntry->m_AliasList[m_AliasLocation+ALIAS_DOC];
|
|||
|
else
|
|||
|
{
|
|||
|
if (CurrentLibEntry && CurrentLibEntry->m_Doc)
|
|||
|
msg_text = CurrentLibEntry->m_Doc;
|
|||
|
}
|
|||
|
m_Doc->SetValue( msg_text );
|
|||
|
|
|||
|
msg_text.Empty();
|
|||
|
if ( m_AliasLocation >= 0 )
|
|||
|
msg_text = CurrentLibEntry->m_AliasList[m_AliasLocation+ALIAS_KEYWORD];
|
|||
|
else
|
|||
|
{
|
|||
|
if (CurrentLibEntry ) msg_text = CurrentLibEntry->m_KeyWord;
|
|||
|
}
|
|||
|
m_Keywords->SetValue(msg_text);
|
|||
|
|
|||
|
msg_text.Empty();
|
|||
|
if ( m_AliasLocation >= 0 )
|
|||
|
msg_text = CurrentLibEntry->m_AliasList[m_AliasLocation+ALIAS_DOC_FILENAME];
|
|||
|
else
|
|||
|
{
|
|||
|
if (CurrentLibEntry) msg_text = CurrentLibEntry->m_DocFile;
|
|||
|
}
|
|||
|
m_Docfile->SetValue( msg_text );
|
|||
|
|
|||
|
if ( m_AliasLocation < 0 ) m_ButtonCopyDoc->Enable(FALSE);
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/*****************************************************/
|
|||
|
void WinEDA_PartPropertiesFrame::BuildPanelBasic(void)
|
|||
|
/*****************************************************/
|
|||
|
/* create the basic panel for component properties editing
|
|||
|
*/
|
|||
|
{
|
|||
|
m_PanelBasic->SetFont(*g_DialogFont);
|
|||
|
|
|||
|
AsConvertButt = new wxCheckBox(m_PanelBasic,-1, _("As Convert"));
|
|||
|
if ( g_AsDeMorgan ) AsConvertButt->SetValue(TRUE);
|
|||
|
m_OptionsBoxSizer->Add(AsConvertButt, 0, wxGROW|wxLEFT|wxRIGHT|wxBOTTOM, 5);
|
|||
|
|
|||
|
ShowPinNumButt = new wxCheckBox(m_PanelBasic,-1, _("Show Pin Num"));
|
|||
|
if ( CurrentLibEntry )
|
|||
|
{
|
|||
|
if ( CurrentLibEntry->m_DrawPinNum ) ShowPinNumButt->SetValue(TRUE);
|
|||
|
}
|
|||
|
else ShowPinNumButt->SetValue(TRUE);
|
|||
|
m_OptionsBoxSizer->Add(ShowPinNumButt, 0, wxGROW|wxLEFT|wxRIGHT|wxBOTTOM, 5);
|
|||
|
|
|||
|
ShowPinNameButt = new wxCheckBox(m_PanelBasic,-1, _("Show Pin Name"));
|
|||
|
if ( CurrentLibEntry )
|
|||
|
{
|
|||
|
if( CurrentLibEntry->m_DrawPinName ) ShowPinNameButt->SetValue(TRUE);
|
|||
|
}
|
|||
|
else ShowPinNameButt->SetValue(TRUE);
|
|||
|
m_OptionsBoxSizer->Add(ShowPinNameButt, 0, wxGROW|wxLEFT|wxRIGHT|wxBOTTOM, 5);
|
|||
|
|
|||
|
m_PinsNameInsideButt = new wxCheckBox(m_PanelBasic,-1, _("Pin Name Inside"));
|
|||
|
if ( CurrentLibEntry )
|
|||
|
{
|
|||
|
if ( CurrentLibEntry->m_TextInside ) m_PinsNameInsideButt->SetValue(TRUE);
|
|||
|
}
|
|||
|
else m_PinsNameInsideButt->SetValue(TRUE);
|
|||
|
m_OptionsBoxSizer->Add(m_PinsNameInsideButt, 0, wxGROW|wxLEFT|wxRIGHT|wxBOTTOM, 5);
|
|||
|
|
|||
|
int number, number_of_units;
|
|||
|
if ( CurrentLibEntry ) number_of_units = CurrentLibEntry->m_UnitCount;
|
|||
|
else number_of_units = 1;
|
|||
|
SelNumberOfUnits->SetValue(number_of_units);
|
|||
|
|
|||
|
if ( CurrentLibEntry && CurrentLibEntry->m_TextInside)
|
|||
|
number = CurrentLibEntry->m_TextInside;
|
|||
|
else number = 40;
|
|||
|
m_SetSkew->SetValue( number );
|
|||
|
|
|||
|
if ( CurrentLibEntry )
|
|||
|
{
|
|||
|
if( CurrentLibEntry->m_Options == ENTRY_POWER )
|
|||
|
m_OptionPower->SetValue(TRUE);
|
|||
|
}
|
|||
|
|
|||
|
if ( CurrentLibEntry )
|
|||
|
{
|
|||
|
if( CurrentLibEntry->m_UnitSelectionLocked )
|
|||
|
m_OptionPartsLocked->SetValue(TRUE);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/*********************************************************/
|
|||
|
void WinEDA_PartPropertiesFrame::BuildPanelEditField(void)
|
|||
|
/**********************************************************/
|
|||
|
/* Create and build the panel managing the fields (REF, VALUE ...)
|
|||
|
of the component
|
|||
|
*/
|
|||
|
{
|
|||
|
wxString Hjustify_list[] =
|
|||
|
{ _("Left justify"),_("Center"),_("Right justify")};
|
|||
|
wxString Vjustify_list[] =
|
|||
|
{ _("Bottom justify"),_("Center"),_("Top justify")};
|
|||
|
int FieldId = m_CurrentFieldId;
|
|||
|
|
|||
|
m_PanelField = new wxPanel(m_NoteBook, ID_PANEL_FIELD);
|
|||
|
m_PanelField->SetFont(*g_DialogFont);
|
|||
|
m_NoteBook->AddPage(m_PanelField, _("Fields"), FALSE);
|
|||
|
|
|||
|
wxBoxSizer * PanelFieldBoxSizer = new wxBoxSizer(wxHORIZONTAL);
|
|||
|
m_PanelField->SetSizer(PanelFieldBoxSizer);
|
|||
|
wxBoxSizer * LeftBoxSizer = new wxBoxSizer(wxVERTICAL);
|
|||
|
PanelFieldBoxSizer->Add(LeftBoxSizer, 0 , wxGROW|wxALL, 5);
|
|||
|
wxBoxSizer * MiddleBoxSizer = new wxBoxSizer(wxVERTICAL);
|
|||
|
PanelFieldBoxSizer->Add(MiddleBoxSizer, 0 , wxGROW|wxALL, 5);
|
|||
|
|
|||
|
m_ShowFieldTextCtrl = new wxCheckBox(m_PanelField,-1,
|
|||
|
_("Show Text") );
|
|||
|
LeftBoxSizer->Add(m_ShowFieldTextCtrl, 0 , wxGROW|wxALL, 5);
|
|||
|
|
|||
|
m_VorientFieldTextCtrl = new wxCheckBox(m_PanelField,-1,
|
|||
|
_("Vertical"));
|
|||
|
LeftBoxSizer->Add(m_VorientFieldTextCtrl, 0 , wxGROW|wxALL, 5);
|
|||
|
|
|||
|
// Create the box for field name display or edition
|
|||
|
m_FieldNameCtrl = new WinEDA_EnterText( m_PanelField,
|
|||
|
_("Field Name:"), m_FieldName[FieldId],
|
|||
|
LeftBoxSizer, wxSize( 200, -1) );
|
|||
|
if ( FieldId < FIELD1 ) m_FieldNameCtrl->Enable(FALSE );
|
|||
|
else m_FieldNameCtrl->Enable( TRUE );
|
|||
|
|
|||
|
// Create the box for text editing (text, size)
|
|||
|
m_FieldTextCtrl = new WinEDA_GraphicTextCtrl( m_PanelField,
|
|||
|
_("Value:"),
|
|||
|
m_FieldText[FieldId], m_FieldSize[FieldId],
|
|||
|
g_UnitMetric, LeftBoxSizer, 200);
|
|||
|
|
|||
|
// Create the box for text editing (position)
|
|||
|
m_FieldPositionCtrl = new WinEDA_PositionCtrl( m_PanelField,
|
|||
|
_("Pos"), m_FieldPosition[FieldId],
|
|||
|
g_UnitMetric , LeftBoxSizer);
|
|||
|
|
|||
|
|
|||
|
m_FieldHJustifyCtrl = new wxRadioBox(m_PanelField,-1,
|
|||
|
_("Hor Justify"), wxDefaultPosition, wxDefaultSize,
|
|||
|
3,Hjustify_list, 1 , wxRA_SPECIFY_COLS);
|
|||
|
m_FieldHJustifyCtrl->SetSelection(1);
|
|||
|
MiddleBoxSizer->Add(m_FieldHJustifyCtrl, 0 , wxGROW|wxALL, 5);
|
|||
|
|
|||
|
m_FieldVJustifyCtrl = new wxRadioBox(m_PanelField,-1,
|
|||
|
_("Vert Justify"), wxDefaultPosition, wxDefaultSize,
|
|||
|
3,Vjustify_list, 1 , wxRA_SPECIFY_COLS);
|
|||
|
m_FieldVJustifyCtrl->SetSelection(1);
|
|||
|
MiddleBoxSizer->Add(m_FieldVJustifyCtrl, 0 , wxGROW|wxALL, 5);
|
|||
|
|
|||
|
// Create the field list
|
|||
|
wxString fieldnamelist[NUMBER_OF_FIELDS];
|
|||
|
for ( int ii = 0; ii < NUMBER_OF_FIELDS; ii++ )
|
|||
|
{
|
|||
|
if ( m_FieldName[ii].IsEmpty() )
|
|||
|
fieldnamelist[ii] = ReturnDefaultFieldName(ii);
|
|||
|
else fieldnamelist[ii] = m_FieldName[ii];
|
|||
|
}
|
|||
|
|
|||
|
m_FieldSelection = new wxRadioBox(m_PanelField, ID_ON_SELECT_FIELD,
|
|||
|
_("Field to edit"), wxDefaultPosition, wxDefaultSize,
|
|||
|
NUMBER_OF_FIELDS, fieldnamelist, 2 , wxRA_SPECIFY_COLS);
|
|||
|
PanelFieldBoxSizer->Add(m_FieldSelection, 0 , wxGROW|wxALL, 5);
|
|||
|
|
|||
|
CopyDataToPanelField();
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
/****************************************************************/
|
|||
|
void WinEDA_PartPropertiesFrame::CopyDataToPanelField(void)
|
|||
|
/****************************************************************/
|
|||
|
/* Set the values displayed on the panel field according to
|
|||
|
the current field number
|
|||
|
*/
|
|||
|
{
|
|||
|
int FieldId = m_CurrentFieldId;
|
|||
|
|
|||
|
for ( int ii = FIELD1; ii < NUMBER_OF_FIELDS; ii++ )
|
|||
|
{
|
|||
|
if ( ! m_FieldName[ii].IsEmpty() )
|
|||
|
m_FieldSelection->SetString(ii, m_FieldName[ii]);
|
|||
|
else m_FieldSelection->SetString(ii, ReturnDefaultFieldName(ii));
|
|||
|
}
|
|||
|
|
|||
|
if ( m_FieldFlags[FieldId] )
|
|||
|
m_ShowFieldTextCtrl->SetValue(TRUE);
|
|||
|
else m_ShowFieldTextCtrl->SetValue(FALSE);
|
|||
|
|
|||
|
if ( m_FieldOrient[FieldId] ) m_VorientFieldTextCtrl->SetValue(TRUE);
|
|||
|
else m_VorientFieldTextCtrl->SetValue(FALSE);
|
|||
|
|
|||
|
m_FieldHJustifyCtrl->SetSelection(m_FieldHJustify[FieldId]);
|
|||
|
|
|||
|
m_FieldVJustifyCtrl->SetSelection(m_FieldVJustify[FieldId]);
|
|||
|
|
|||
|
m_FieldPositionCtrl->SetValue(m_FieldPosition[FieldId].x, m_FieldPosition[FieldId].y );
|
|||
|
|
|||
|
m_FieldNameCtrl->SetValue(m_FieldName[FieldId]);
|
|||
|
if ( FieldId < FIELD1 ) m_FieldNameCtrl->Enable(FALSE );
|
|||
|
else m_FieldNameCtrl->Enable( TRUE );
|
|||
|
m_FieldTextCtrl->SetValue(m_FieldText[FieldId]); // display new text field
|
|||
|
m_FieldTextCtrl->SetValue(m_FieldSize[FieldId]); // display new size field
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
/****************************************************************/
|
|||
|
void WinEDA_PartPropertiesFrame::CopyPanelFieldToData(void)
|
|||
|
/****************************************************************/
|
|||
|
/* Copy the values displayed on the panel field to the buffers according to
|
|||
|
the current field number
|
|||
|
*/
|
|||
|
{
|
|||
|
int id = m_CurrentFieldId;
|
|||
|
|
|||
|
m_FieldFlags[id] = m_ShowFieldTextCtrl->GetValue();
|
|||
|
m_FieldOrient[id] = m_VorientFieldTextCtrl->GetValue();
|
|||
|
m_FieldHJustify[id] = m_FieldHJustifyCtrl->GetSelection();
|
|||
|
m_FieldVJustify[id] = m_FieldVJustifyCtrl->GetSelection();
|
|||
|
m_FieldText[id] = m_FieldTextCtrl->GetText();
|
|||
|
m_FieldName[id] = m_FieldNameCtrl->GetValue();
|
|||
|
m_FieldPosition[id] = m_FieldPositionCtrl->GetValue();
|
|||
|
m_FieldSize[id] = m_FieldTextCtrl->GetTextSize();
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/********************************************************************/
|
|||
|
void WinEDA_PartPropertiesFrame::SelectNewField(wxCommandEvent& event)
|
|||
|
/********************************************************************/
|
|||
|
/* called when changing the current field selected
|
|||
|
Save the current field settings in buffer and display the new one
|
|||
|
*/
|
|||
|
{
|
|||
|
CopyPanelFieldToData();
|
|||
|
m_CurrentFieldId = m_FieldSelection->GetSelection();
|
|||
|
CopyDataToPanelField();
|
|||
|
}
|
|||
|
|
|||
|
/**************************************************************************/
|
|||
|
void WinEDA_PartPropertiesFrame::PartPropertiesAccept(wxCommandEvent& event)
|
|||
|
/**************************************************************************/
|
|||
|
/* Updaye the current component parameters
|
|||
|
*/
|
|||
|
{
|
|||
|
int ii, jj;
|
|||
|
|
|||
|
if( CurrentLibEntry == NULL )
|
|||
|
{
|
|||
|
Close(); return;
|
|||
|
}
|
|||
|
|
|||
|
m_Parent->m_CurrentScreen->SetModify();
|
|||
|
m_Parent->SaveCopyInUndoList(CurrentLibEntry);
|
|||
|
|
|||
|
CopyPanelFieldToData();
|
|||
|
|
|||
|
/* A new name could be entered in VALUE field.
|
|||
|
Must not be an existing alias name in alias list box */
|
|||
|
jj = m_PartAliasList->GetCount();
|
|||
|
wxString newvalue = m_FieldText[VALUE];
|
|||
|
for ( ii = 0; ii < jj; ii++ )
|
|||
|
{
|
|||
|
if( newvalue.CmpNoCase(m_PartAliasList->GetString(ii).GetData()) == 0 )
|
|||
|
{
|
|||
|
wxString msg;
|
|||
|
msg.Printf( wxT("Alias %s exists!"), newvalue.GetData());
|
|||
|
DisplayError(this, msg);
|
|||
|
return;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/* Update the doc, keyword and doc filename strings */
|
|||
|
if ( m_AliasLocation < 0 )
|
|||
|
{
|
|||
|
CurrentLibEntry->m_Doc = m_Doc->GetValue();
|
|||
|
CurrentLibEntry->m_KeyWord = m_Keywords->GetValue();
|
|||
|
CurrentLibEntry->m_DocFile = m_Docfile->GetValue();
|
|||
|
}
|
|||
|
|
|||
|
else
|
|||
|
{
|
|||
|
CurrentLibEntry->m_AliasList[m_AliasLocation+ALIAS_DOC] = m_Doc->GetValue();
|
|||
|
CurrentLibEntry->m_AliasList[m_AliasLocation+ALIAS_KEYWORD] = m_Keywords->GetValue();
|
|||
|
CurrentLibEntry->m_AliasList[m_AliasLocation+ALIAS_DOC_FILENAME] = m_Docfile->GetValue();
|
|||
|
}
|
|||
|
|
|||
|
/* Update the alias list */
|
|||
|
/* 1 - Add names: test for a not existing name in old alias list: */
|
|||
|
jj = m_PartAliasList->GetCount();
|
|||
|
for ( ii = 0; ii < jj; ii++ )
|
|||
|
{
|
|||
|
if ( LocateAlias( CurrentLibEntry->m_AliasList, m_PartAliasList->GetString(ii)) < 0 )
|
|||
|
{ // new alias must be created
|
|||
|
CurrentLibEntry->m_AliasList.Add(m_PartAliasList->GetString(ii));
|
|||
|
CurrentLibEntry->m_AliasList.Add(wxEmptyString); // Add a void doc string
|
|||
|
CurrentLibEntry->m_AliasList.Add(wxEmptyString); // Add a void keyword list string
|
|||
|
CurrentLibEntry->m_AliasList.Add(wxEmptyString); // Add a void doc filename string
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/* 2 - Remove delete names: test for an non existing name in new alias list: */
|
|||
|
int kk, kkmax = CurrentLibEntry->m_AliasList.GetCount();
|
|||
|
for ( kk = 0; kk < kkmax; )
|
|||
|
{
|
|||
|
jj = m_PartAliasList->GetCount();
|
|||
|
wxString aliasname = CurrentLibEntry->m_AliasList[kk];
|
|||
|
for ( ii = 0; ii < jj; ii++ )
|
|||
|
{
|
|||
|
if( aliasname.CmpNoCase(m_PartAliasList->GetString(ii).GetData()) == 0 )
|
|||
|
{
|
|||
|
kk += ALIAS_NEXT; // Alias exist in new list. keep it and test next old name
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
if ( ii == jj ) // Alias not found in new list, remove it (4 strings in kk position)
|
|||
|
{
|
|||
|
for( ii = 0; ii < ALIAS_NEXT; ii++ ) CurrentLibEntry->m_AliasList.RemoveAt(kk);
|
|||
|
kkmax = CurrentLibEntry->m_AliasList.GetCount();
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
// Void fields for REFERENCE and VALUE are not allowed
|
|||
|
if ( m_FieldText[REFERENCE].IsEmpty() )
|
|||
|
{
|
|||
|
m_FieldText[REFERENCE] = CurrentLibEntry->m_Prefix.m_Text;
|
|||
|
}
|
|||
|
|
|||
|
if ( m_FieldText[VALUE].IsEmpty() )
|
|||
|
{
|
|||
|
m_FieldText[VALUE] = CurrentLibEntry->m_Name.m_Text;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
if ( CurrentLibEntry->m_Name.m_Text != m_FieldText[VALUE] )
|
|||
|
m_RecreateToolbar = TRUE;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
CopyBufferToFieldData(& CurrentLibEntry->m_Prefix);
|
|||
|
CopyBufferToFieldData(& CurrentLibEntry->m_Name);
|
|||
|
|
|||
|
for ( ii = FOOTPRINT; ii < NUMBER_OF_FIELDS; ii++ )
|
|||
|
{
|
|||
|
LibDrawField * Field = CurrentLibEntry->Fields;
|
|||
|
LibDrawField * NextField, * previousField = NULL;
|
|||
|
while ( Field )
|
|||
|
{
|
|||
|
NextField = (LibDrawField*)Field->Pnext;
|
|||
|
if( Field->m_FieldId == ii )
|
|||
|
{
|
|||
|
CopyBufferToFieldData(Field);
|
|||
|
// An old field exists; delete it if void
|
|||
|
if( Field->m_Text.IsEmpty() )
|
|||
|
{
|
|||
|
if ( ii < FIELD1 || Field->m_Name.IsEmpty() )
|
|||
|
{
|
|||
|
delete Field;
|
|||
|
if ( previousField ) previousField->Pnext = NextField;
|
|||
|
else CurrentLibEntry->Fields = NextField;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
}
|
|||
|
|
|||
|
previousField = Field;
|
|||
|
Field = NextField;
|
|||
|
}
|
|||
|
|
|||
|
if ( Field == NULL) // Do not exists: must be created if not void
|
|||
|
{
|
|||
|
bool create = FALSE;
|
|||
|
if ( ! m_FieldText[ii].IsEmpty() ) create = TRUE;
|
|||
|
if ( ! m_FieldName[ii].IsEmpty() && (m_FieldName[ii] != ReturnDefaultFieldName(ii)) )
|
|||
|
create = TRUE;
|
|||
|
if ( create )
|
|||
|
{
|
|||
|
Field = new LibDrawField(ii);
|
|||
|
CopyBufferToFieldData(Field);
|
|||
|
Field->Pnext = CurrentLibEntry->Fields;
|
|||
|
CurrentLibEntry->Fields = Field;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/* for a user field (FieldId >= FIELD1), if a field value is void,
|
|||
|
fill it with "~" because for a library componenta void field is not a very good idea
|
|||
|
(we do not see anything...) and in schematic this text is like a void text */
|
|||
|
{
|
|||
|
LibDrawField * Field = CurrentLibEntry->Fields;
|
|||
|
while ( Field )
|
|||
|
{
|
|||
|
if( Field->m_FieldId >= FIELD1 )
|
|||
|
if ( Field->m_Text.IsEmpty() ) Field->m_Text = wxT("~");
|
|||
|
Field = (LibDrawField*)Field->Pnext;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
ii = SelNumberOfUnits->GetValue();
|
|||
|
if ( ChangeNbUnitsPerPackage(ii) )
|
|||
|
m_RecreateToolbar = TRUE;
|
|||
|
|
|||
|
if ( AsConvertButt->GetValue() )
|
|||
|
{
|
|||
|
if ( ! g_AsDeMorgan )
|
|||
|
{
|
|||
|
g_AsDeMorgan = 1;
|
|||
|
if ( SetUnsetConvert() ) m_RecreateToolbar = TRUE;
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
if ( g_AsDeMorgan )
|
|||
|
{
|
|||
|
g_AsDeMorgan = 0;
|
|||
|
if ( SetUnsetConvert() ) m_RecreateToolbar = TRUE;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
CurrentLibEntry->m_DrawPinNum = ShowPinNumButt->GetValue() ? 1 : 0;
|
|||
|
CurrentLibEntry->m_DrawPinName = ShowPinNameButt->GetValue() ? 1 : 0;
|
|||
|
|
|||
|
if ( m_PinsNameInsideButt->GetValue() == FALSE)
|
|||
|
CurrentLibEntry->m_TextInside = 0;
|
|||
|
else
|
|||
|
CurrentLibEntry->m_TextInside = m_SetSkew->GetValue();
|
|||
|
|
|||
|
if ( m_OptionPower->GetValue() == TRUE)
|
|||
|
CurrentLibEntry->m_Options = ENTRY_POWER;
|
|||
|
else
|
|||
|
CurrentLibEntry->m_Options = ENTRY_NORMAL;
|
|||
|
|
|||
|
/* Set the option "Units locked".
|
|||
|
Obviously, cannot be TRUE if there is only one part */
|
|||
|
CurrentLibEntry->m_UnitSelectionLocked = m_OptionPartsLocked->GetValue();
|
|||
|
if ( CurrentLibEntry->m_UnitCount <= 1 )
|
|||
|
CurrentLibEntry->m_UnitSelectionLocked = FALSE;
|
|||
|
|
|||
|
if ( m_RecreateToolbar ) m_Parent->ReCreateHToolbar();
|
|||
|
|
|||
|
m_Parent->DisplayLibInfos();
|
|||
|
|
|||
|
/* Update the footprint filter list */
|
|||
|
CurrentLibEntry->m_FootprintList.Clear();
|
|||
|
jj = m_FootprintFilterListBox->GetCount();
|
|||
|
for ( ii = 0; ii < jj; ii ++)
|
|||
|
CurrentLibEntry->m_FootprintList.Add(m_FootprintFilterListBox->GetString(ii));
|
|||
|
|
|||
|
EndModal(1);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/*******************************************************************************/
|
|||
|
void WinEDA_PartPropertiesFrame::CopyDocToAlias(wxCommandEvent& WXUNUSED(event))
|
|||
|
/******************************************************************************/
|
|||
|
{
|
|||
|
if( CurrentLibEntry == NULL ) return;
|
|||
|
if ( CurrentAliasName.IsEmpty() ) return;
|
|||
|
|
|||
|
m_Doc->SetValue(CurrentLibEntry->m_Doc);
|
|||
|
m_Docfile->SetValue(CurrentLibEntry->m_DocFile);
|
|||
|
m_Keywords->SetValue(CurrentLibEntry->m_KeyWord);
|
|||
|
}
|
|||
|
|
|||
|
/**********************************************************/
|
|||
|
void WinEDA_PartPropertiesFrame::DeleteAllAliasOfPart(
|
|||
|
wxCommandEvent& WXUNUSED(event))
|
|||
|
/**********************************************************/
|
|||
|
{
|
|||
|
|
|||
|
CurrentAliasName.Empty();
|
|||
|
if( CurrentLibEntry )
|
|||
|
{
|
|||
|
if( IsOK(this, _("Ok to Delete Alias LIST") ) )
|
|||
|
{
|
|||
|
m_PartAliasList->Clear();
|
|||
|
m_RecreateToolbar = TRUE;
|
|||
|
m_ButtonDeleteAllAlias->Enable(FALSE);
|
|||
|
m_ButtonDeleteOneAlias->Enable(FALSE);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
/*******************************************************************************/
|
|||
|
void WinEDA_PartPropertiesFrame::AddAliasOfPart( wxCommandEvent& WXUNUSED(event))
|
|||
|
/*******************************************************************************/
|
|||
|
/* Add a new name to the alias list box
|
|||
|
New name cannot be the root name, and must not exists
|
|||
|
*/
|
|||
|
{
|
|||
|
wxString Line;
|
|||
|
wxString aliasname;
|
|||
|
|
|||
|
if(CurrentLibEntry == NULL) return;
|
|||
|
|
|||
|
if( Get_Message(_("New alias:"),Line, this) != 0 ) return;
|
|||
|
|
|||
|
Line.Replace( wxT(" "), wxT("_") );
|
|||
|
aliasname = Line;
|
|||
|
|
|||
|
if ( CurrentLibEntry->m_Name.m_Text.CmpNoCase(Line) == 0 )
|
|||
|
{
|
|||
|
DisplayError(this, _("This is the Root Part"), 10); return;
|
|||
|
}
|
|||
|
|
|||
|
/* test for an existing name: */
|
|||
|
int ii, jj = m_PartAliasList->GetCount();
|
|||
|
for ( ii = 0; ii < jj; ii++ )
|
|||
|
{
|
|||
|
if( aliasname.CmpNoCase(m_PartAliasList->GetString(ii)) == 0 )
|
|||
|
{
|
|||
|
DisplayError(this, _("Already in use"), 10);
|
|||
|
return;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
m_PartAliasList->Append(aliasname);
|
|||
|
if ( CurrentAliasName.IsEmpty() ) m_ButtonDeleteAllAlias->Enable(TRUE);
|
|||
|
m_ButtonDeleteOneAlias->Enable(TRUE);
|
|||
|
|
|||
|
m_RecreateToolbar = TRUE;
|
|||
|
}
|
|||
|
|
|||
|
/********************************************************/
|
|||
|
void WinEDA_PartPropertiesFrame::DeleteAliasOfPart(
|
|||
|
wxCommandEvent& WXUNUSED(event))
|
|||
|
/********************************************************/
|
|||
|
{
|
|||
|
wxString aliasname = m_PartAliasList->GetStringSelection();
|
|||
|
|
|||
|
if ( aliasname.IsEmpty() ) return;
|
|||
|
if ( aliasname == CurrentAliasName )
|
|||
|
{
|
|||
|
wxString msg = CurrentAliasName + _(" is Current Selected Alias!");
|
|||
|
DisplayError(this, msg );
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
int ii = m_PartAliasList->GetSelection();
|
|||
|
m_PartAliasList->Delete(ii);
|
|||
|
|
|||
|
if ( ! CurrentLibEntry || (CurrentLibEntry->m_AliasList.GetCount() == 0) )
|
|||
|
{
|
|||
|
m_ButtonDeleteAllAlias->Enable(FALSE);
|
|||
|
m_ButtonDeleteOneAlias->Enable(FALSE);
|
|||
|
}
|
|||
|
m_RecreateToolbar = TRUE;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
/********************************************************************/
|
|||
|
bool WinEDA_PartPropertiesFrame::ChangeNbUnitsPerPackage(int MaxUnit)
|
|||
|
/********************************************************************/
|
|||
|
/* Routine de modification du nombre d'unites par package pour le
|
|||
|
composant courant;
|
|||
|
*/
|
|||
|
{
|
|||
|
int OldNumUnits, ii, FlagDel = -1;
|
|||
|
LibEDA_BaseStruct* DrawItem, * NextDrawItem;
|
|||
|
|
|||
|
if( CurrentLibEntry == NULL ) return FALSE;
|
|||
|
|
|||
|
/* Si pas de changement: termine */
|
|||
|
if ( CurrentLibEntry->m_UnitCount == MaxUnit ) return FALSE;
|
|||
|
|
|||
|
OldNumUnits = CurrentLibEntry->m_UnitCount;
|
|||
|
if ( OldNumUnits < 1 ) OldNumUnits = 1;
|
|||
|
|
|||
|
CurrentLibEntry->m_UnitCount = MaxUnit;
|
|||
|
|
|||
|
|
|||
|
/* Traitement des unites enlevees ou rajoutees */
|
|||
|
if(OldNumUnits > CurrentLibEntry->m_UnitCount )
|
|||
|
{
|
|||
|
DrawItem = CurrentLibEntry->m_Drawings;
|
|||
|
for ( ; DrawItem != NULL; DrawItem = NextDrawItem)
|
|||
|
{
|
|||
|
NextDrawItem = DrawItem->Next();
|
|||
|
if( DrawItem->m_Unit > MaxUnit ) /* Item a effacer */
|
|||
|
{
|
|||
|
if( FlagDel < 0 )
|
|||
|
{
|
|||
|
if( IsOK(this, _("Delete units") ) )
|
|||
|
{
|
|||
|
/* Si part selectee n'existe plus: selection 1ere unit */
|
|||
|
if( CurrentUnit > MaxUnit ) CurrentUnit = 1;
|
|||
|
FlagDel = 1;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
FlagDel = 0;
|
|||
|
MaxUnit = OldNumUnits;
|
|||
|
CurrentLibEntry->m_UnitCount = MaxUnit;
|
|||
|
return FALSE;
|
|||
|
}
|
|||
|
}
|
|||
|
DeleteOneLibraryDrawStruct(m_Parent->DrawPanel, NULL, CurrentLibEntry,
|
|||
|
DrawItem, 0);
|
|||
|
}
|
|||
|
}
|
|||
|
return TRUE;
|
|||
|
}
|
|||
|
|
|||
|
if(OldNumUnits < CurrentLibEntry->m_UnitCount )
|
|||
|
{
|
|||
|
DrawItem = CurrentLibEntry->m_Drawings;
|
|||
|
for ( ; DrawItem != NULL; DrawItem = DrawItem->Next() )
|
|||
|
{
|
|||
|
/* Duplication des items pour autres elements */
|
|||
|
if( DrawItem->m_Unit == 1 )
|
|||
|
{
|
|||
|
for ( ii = OldNumUnits +1; ii <= MaxUnit; ii ++ )
|
|||
|
{
|
|||
|
NextDrawItem = CopyDrawEntryStruct(this, DrawItem);
|
|||
|
NextDrawItem->Pnext = CurrentLibEntry->m_Drawings;
|
|||
|
CurrentLibEntry->m_Drawings = NextDrawItem;
|
|||
|
NextDrawItem->m_Unit = ii;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
return TRUE;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/*****************************************************/
|
|||
|
bool WinEDA_PartPropertiesFrame::SetUnsetConvert(void)
|
|||
|
/*****************************************************/
|
|||
|
/* cr<63>e ou efface (selon option AsConvert) les <20>l<EFBFBD>ments
|
|||
|
de la repr<EFBFBD>sentation convertie d'un composant
|
|||
|
*/
|
|||
|
{
|
|||
|
int FlagDel = 0;
|
|||
|
LibEDA_BaseStruct* DrawItem = NULL, * NextDrawItem;
|
|||
|
|
|||
|
if( g_AsDeMorgan ) /* Representation convertie a creer */
|
|||
|
{
|
|||
|
/* Traitement des elements a ajouter ( pins seulement ) */
|
|||
|
if( CurrentLibEntry ) DrawItem = CurrentLibEntry->m_Drawings;
|
|||
|
for ( ; DrawItem != NULL; DrawItem = DrawItem->Next() )
|
|||
|
{
|
|||
|
/* Duplication des items pour autres elements */
|
|||
|
if( DrawItem->m_StructType != COMPONENT_PIN_DRAW_TYPE ) continue;
|
|||
|
if( DrawItem->m_Convert == 1 )
|
|||
|
{
|
|||
|
if( FlagDel == 0 )
|
|||
|
{
|
|||
|
if( IsOK(this, _("Create pins for Convert items")) )
|
|||
|
FlagDel = 1;
|
|||
|
else
|
|||
|
{
|
|||
|
if( IsOK(this, _("Part as \"De Morgan\" anymore")) )
|
|||
|
return TRUE;
|
|||
|
|
|||
|
g_AsDeMorgan = 0; return FALSE;
|
|||
|
}
|
|||
|
}
|
|||
|
NextDrawItem = CopyDrawEntryStruct(this, DrawItem);
|
|||
|
NextDrawItem->Pnext = CurrentLibEntry->m_Drawings;
|
|||
|
CurrentLibEntry->m_Drawings = NextDrawItem;
|
|||
|
NextDrawItem->m_Convert = 2;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
else /* Representation convertie a supprimer */
|
|||
|
{
|
|||
|
/* Traitement des elements <20> supprimer */
|
|||
|
if( CurrentLibEntry ) DrawItem = CurrentLibEntry->m_Drawings;
|
|||
|
for ( ; DrawItem != NULL; DrawItem = NextDrawItem)
|
|||
|
{
|
|||
|
NextDrawItem = DrawItem->Next();
|
|||
|
if( DrawItem->m_Convert > 1 ) /* Item a effacer */
|
|||
|
{
|
|||
|
if( FlagDel == 0 )
|
|||
|
{
|
|||
|
if( IsOK(this, _("Delete Convert items") ) )
|
|||
|
{
|
|||
|
CurrentConvert = 1;
|
|||
|
FlagDel = 1;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
g_AsDeMorgan = 1;
|
|||
|
return FALSE;
|
|||
|
}
|
|||
|
}
|
|||
|
m_Parent->GetScreen()->SetModify();
|
|||
|
DeleteOneLibraryDrawStruct(m_Parent->DrawPanel, NULL, CurrentLibEntry, DrawItem, 0);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
return TRUE;
|
|||
|
}
|
|||
|
|
|||
|
/****************************************************************************/
|
|||
|
void WinEDA_PartPropertiesFrame::BrowseAndSelectDocFile(wxCommandEvent& event)
|
|||
|
/****************************************************************************/
|
|||
|
{
|
|||
|
wxString FullFileName, mask;
|
|||
|
wxString docpath(g_RealLibDirBuffer), filename;
|
|||
|
|
|||
|
docpath += wxT("doc");
|
|||
|
docpath += STRING_DIR_SEP;
|
|||
|
mask = wxT("*");
|
|||
|
FullFileName = EDA_FileSelector(_("Doc Files"),
|
|||
|
docpath, /* Chemin par defaut */
|
|||
|
wxEmptyString, /* nom fichier par defaut */
|
|||
|
wxEmptyString, /* extension par defaut */
|
|||
|
mask, /* Masque d'affichage */
|
|||
|
this,
|
|||
|
wxFD_OPEN,
|
|||
|
TRUE
|
|||
|
);
|
|||
|
if ( FullFileName.IsEmpty() ) return;
|
|||
|
|
|||
|
// Suppression du chemin par defaut pour le fichier de doc:
|
|||
|
filename = MakeReducedFileName(FullFileName,docpath, wxEmptyString);
|
|||
|
m_Docfile->SetValue(filename);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/**********************************************************/
|
|||
|
void WinEDA_PartPropertiesFrame::DeleteAllFootprintFilter(
|
|||
|
wxCommandEvent& WXUNUSED(event))
|
|||
|
/**********************************************************/
|
|||
|
{
|
|||
|
|
|||
|
if( IsOK(this, _("Ok to Delete FootprintFilter LIST") ) )
|
|||
|
{
|
|||
|
m_FootprintFilterListBox->Clear();
|
|||
|
m_ButtonDeleteAllFootprintFilter->Enable(FALSE);
|
|||
|
m_ButtonDeleteOneFootprintFilter->Enable(FALSE);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/*******************************************************************************/
|
|||
|
void WinEDA_PartPropertiesFrame::AddFootprintFilter( wxCommandEvent& WXUNUSED(event))
|
|||
|
/*******************************************************************************/
|
|||
|
/* Add a new name to the alias list box
|
|||
|
New name cannot be the root name, and must not exists
|
|||
|
*/
|
|||
|
{
|
|||
|
wxString Line;
|
|||
|
|
|||
|
if(CurrentLibEntry == NULL) return;
|
|||
|
|
|||
|
if( Get_Message(_("New FootprintFilter:"),Line, this) != 0 ) return;
|
|||
|
|
|||
|
Line.Replace( wxT(" "), wxT("_") );
|
|||
|
|
|||
|
/* test for an existing name: */
|
|||
|
int ii, jj = m_FootprintFilterListBox->GetCount();
|
|||
|
for ( ii = 0; ii < jj; ii++ )
|
|||
|
{
|
|||
|
if( Line.CmpNoCase(m_FootprintFilterListBox->GetString(ii)) == 0 )
|
|||
|
{
|
|||
|
DisplayError(this, _("Already in use"), 10);
|
|||
|
return;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
m_FootprintFilterListBox->Append(Line);
|
|||
|
m_ButtonDeleteAllFootprintFilter->Enable(TRUE);
|
|||
|
m_ButtonDeleteOneFootprintFilter->Enable(TRUE);
|
|||
|
}
|
|||
|
|
|||
|
/********************************************************/
|
|||
|
void WinEDA_PartPropertiesFrame::DeleteOneFootprintFilter(
|
|||
|
wxCommandEvent& WXUNUSED(event))
|
|||
|
/********************************************************/
|
|||
|
{
|
|||
|
int ii = m_FootprintFilterListBox->GetSelection();
|
|||
|
m_FootprintFilterListBox->Delete(ii);
|
|||
|
|
|||
|
if ( ! CurrentLibEntry || (m_FootprintFilterListBox->GetCount() == 0) )
|
|||
|
{
|
|||
|
m_ButtonDeleteAllFootprintFilter->Enable(FALSE);
|
|||
|
m_ButtonDeleteOneFootprintFilter->Enable(FALSE);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|