2007-06-05 12:10:51 +00:00
|
|
|
|
/************************************************/
|
|
|
|
|
/* Module editor: Dialog box for editing module */
|
|
|
|
|
/* properties and carateristics */
|
|
|
|
|
/* include in modedit.cpp */
|
|
|
|
|
/************************************************/
|
|
|
|
|
|
|
|
|
|
#include "dialog_edit_module.h"
|
|
|
|
|
|
|
|
|
|
/**************************************/
|
|
|
|
|
/* class WinEDA_ModulePropertiesFrame */
|
|
|
|
|
/**************************************/
|
|
|
|
|
|
|
|
|
|
BEGIN_EVENT_TABLE(WinEDA_ModulePropertiesFrame, wxDialog)
|
|
|
|
|
EVT_BUTTON(ID_ACCEPT_MODULE_PROPERTIES,
|
|
|
|
|
WinEDA_ModulePropertiesFrame::ModulePropertiesAccept)
|
|
|
|
|
EVT_BUTTON(ID_CLOSE_MODULE_PROPERTIES, WinEDA_ModulePropertiesFrame::OnQuit)
|
|
|
|
|
EVT_BUTTON(ID_MODULE_EDIT_ADD_TEXT, WinEDA_ModulePropertiesFrame::CreateTextModule)
|
|
|
|
|
EVT_BUTTON(ID_MODULE_EDIT_EDIT_TEXT, WinEDA_ModulePropertiesFrame::EditOrDelTextModule)
|
|
|
|
|
EVT_BUTTON(ID_MODULE_EDIT_DELETE_TEXT, WinEDA_ModulePropertiesFrame::EditOrDelTextModule)
|
|
|
|
|
EVT_BUTTON(ID_MODULE_PROPERTIES_EXCHANGE, WinEDA_ModulePropertiesFrame::ExchangeModule)
|
|
|
|
|
EVT_KICAD_CHOICEBOX(ID_MODULE_LISTBOX_SELECT, WinEDA_ModulePropertiesFrame::SelectTextListBox)
|
|
|
|
|
EVT_RADIOBOX(ID_LISTBOX_ORIENT_SELECT, WinEDA_ModulePropertiesFrame::ModuleOrientEvent)
|
|
|
|
|
EVT_BUTTON(ID_GOTO_MODULE_EDITOR, WinEDA_ModulePropertiesFrame::GotoModuleEditor)
|
|
|
|
|
|
|
|
|
|
END_EVENT_TABLE()
|
|
|
|
|
|
|
|
|
|
/**********************/
|
|
|
|
|
/* class Panel3D_Ctrl */
|
|
|
|
|
/**********************/
|
|
|
|
|
BEGIN_EVENT_TABLE(Panel3D_Ctrl, wxPanel)
|
|
|
|
|
EVT_BUTTON(ID_BROWSE_3D_LIB, Panel3D_Ctrl::Browse3DLib)
|
|
|
|
|
EVT_BUTTON(ID_ADD_3D_SHAPE, Panel3D_Ctrl::AddOrRemove3DShape)
|
|
|
|
|
EVT_BUTTON(ID_REMOVE_3D_SHAPE, Panel3D_Ctrl::AddOrRemove3DShape)
|
|
|
|
|
END_EVENT_TABLE()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#define H_SIZE 430
|
|
|
|
|
#define V_SIZE 530
|
|
|
|
|
/**************************************************************************************/
|
|
|
|
|
WinEDA_ModulePropertiesFrame::WinEDA_ModulePropertiesFrame(WinEDA_BasePcbFrame *parent,
|
|
|
|
|
MODULE * Module,wxDC * DC,
|
|
|
|
|
const wxPoint & framepos):
|
|
|
|
|
wxDialog(parent, -1, _("Module properties"), framepos,
|
|
|
|
|
wxSize(H_SIZE, V_SIZE), DIALOG_STYLE)
|
|
|
|
|
/**************************************************************************************/
|
|
|
|
|
{
|
|
|
|
|
wxString number;
|
|
|
|
|
|
|
|
|
|
SetIcon( wxICON(icon_modedit) ); // Give an icon
|
|
|
|
|
|
|
|
|
|
m_Parent = parent;
|
|
|
|
|
SetFont(*g_DialogFont);
|
|
|
|
|
m_DC = DC;
|
|
|
|
|
|
|
|
|
|
m_LayerCtrl = NULL;
|
|
|
|
|
m_OrientCtrl = NULL;
|
|
|
|
|
m_OrientValue = NULL;
|
|
|
|
|
m_Doc = m_Keyword = NULL;
|
|
|
|
|
|
|
|
|
|
m_CurrentModule = Module;
|
|
|
|
|
m_DeleteFieddButton = NULL;
|
|
|
|
|
|
|
|
|
|
if ( m_CurrentModule )
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
CreateControls();
|
|
|
|
|
|
|
|
|
|
GetSizer()->Fit(this);
|
|
|
|
|
GetSizer()->SetSizeHints(this);
|
|
|
|
|
Centre();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*****************************************************/
|
|
|
|
|
void WinEDA_ModulePropertiesFrame::CreateControls(void)
|
|
|
|
|
/*****************************************************/
|
|
|
|
|
{
|
|
|
|
|
wxPoint pos;
|
|
|
|
|
wxButton * Button;
|
|
|
|
|
wxSize usize;
|
|
|
|
|
bool FullOptions = FALSE;
|
|
|
|
|
|
|
|
|
|
if ( m_Parent->m_Ident == PCB_FRAME ) FullOptions = TRUE;
|
|
|
|
|
|
|
|
|
|
usize = GetClientSize();
|
|
|
|
|
|
|
|
|
|
m_GeneralBoxSizer = new wxBoxSizer(wxVERTICAL);
|
|
|
|
|
SetSizer(m_GeneralBoxSizer);
|
|
|
|
|
|
|
|
|
|
m_NoteBook = new wxNotebook(this, ID_NOTEBOOK,
|
|
|
|
|
wxDefaultPosition,wxSize(usize.x,usize.y - 34) );
|
|
|
|
|
m_NoteBook->SetFont(*g_DialogFont);
|
|
|
|
|
|
|
|
|
|
m_GeneralBoxSizer->Add(m_NoteBook, 0, wxGROW|wxALL, 5);
|
|
|
|
|
|
|
|
|
|
// Add panels
|
|
|
|
|
m_PanelProperties = new wxPanel(m_NoteBook, -1);
|
|
|
|
|
m_PanelProperties->SetFont(*g_DialogFont);
|
|
|
|
|
m_PanelPropertiesBoxSizer = new wxBoxSizer(wxHORIZONTAL);
|
|
|
|
|
m_PanelProperties->SetSizer(m_PanelPropertiesBoxSizer);
|
|
|
|
|
BuildPanelModuleProperties(FullOptions);
|
|
|
|
|
m_NoteBook->AddPage(m_PanelProperties, _("Properties"), TRUE);
|
|
|
|
|
|
|
|
|
|
m_Panel3D = new Panel3D_Ctrl(this, m_NoteBook, -1,
|
|
|
|
|
m_CurrentModule->m_3D_Drawings);
|
|
|
|
|
m_NoteBook->AddPage(m_Panel3D, _("3D settings"), FALSE);
|
|
|
|
|
|
|
|
|
|
/* creation des autres formes 3D */
|
|
|
|
|
Panel3D_Ctrl * panel3D = m_Panel3D, * nextpanel3D;
|
|
|
|
|
Struct3D_Master *draw3D = m_CurrentModule->m_3D_Drawings;
|
|
|
|
|
draw3D = (Struct3D_Master *) draw3D->Pnext;
|
|
|
|
|
for ( ; draw3D != NULL; draw3D = (Struct3D_Master *) draw3D->Pnext)
|
|
|
|
|
{
|
|
|
|
|
nextpanel3D = new Panel3D_Ctrl(this, m_NoteBook, -1, draw3D);
|
|
|
|
|
m_NoteBook->AddPage(nextpanel3D, _("3D settings"), FALSE);
|
|
|
|
|
panel3D->m_Pnext = nextpanel3D;
|
|
|
|
|
nextpanel3D->m_Pback = panel3D;
|
|
|
|
|
panel3D = nextpanel3D;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* Creation des boutons de commande */
|
|
|
|
|
wxBoxSizer* ButtonsBoxSizer = new wxBoxSizer(wxHORIZONTAL);
|
|
|
|
|
m_GeneralBoxSizer->Add(ButtonsBoxSizer, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5);
|
|
|
|
|
|
|
|
|
|
Button = new wxButton(this, ID_ACCEPT_MODULE_PROPERTIES,
|
|
|
|
|
_("Ok"));
|
|
|
|
|
Button->SetForegroundColour(*wxRED);
|
|
|
|
|
ButtonsBoxSizer->Add(Button, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
|
|
|
|
|
|
|
|
|
|
Button = new wxButton(this, ID_CLOSE_MODULE_PROPERTIES,
|
|
|
|
|
_("Cancel"));
|
|
|
|
|
Button->SetForegroundColour(*wxBLUE);
|
|
|
|
|
ButtonsBoxSizer->Add(Button, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/***********************************************************/
|
|
|
|
|
void Panel3D_Ctrl::AddOrRemove3DShape(wxCommandEvent& event)
|
|
|
|
|
/***********************************************************/
|
|
|
|
|
{
|
|
|
|
|
if( event.GetId() == ID_ADD_3D_SHAPE)
|
|
|
|
|
{
|
|
|
|
|
Panel3D_Ctrl * panel3D = new Panel3D_Ctrl(m_ParentFrame, m_Parent,
|
|
|
|
|
-1, NULL);
|
|
|
|
|
m_Parent->InsertPage(m_Parent->GetSelection()+1,
|
|
|
|
|
panel3D, _("3D settings"), TRUE);
|
|
|
|
|
panel3D->m_Pback = this;
|
|
|
|
|
panel3D->m_Pnext = m_Pnext;
|
|
|
|
|
if ( m_Pnext ) m_Pnext->m_Pback = panel3D;
|
|
|
|
|
m_Pnext = panel3D;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if( event.GetId() == ID_REMOVE_3D_SHAPE)
|
|
|
|
|
{
|
|
|
|
|
if ( m_Pback )
|
|
|
|
|
{
|
|
|
|
|
m_Pback->m_Pnext = m_Pnext;
|
|
|
|
|
if ( m_Pnext ) m_Pnext->m_Pback = m_Pback;
|
|
|
|
|
m_Parent->DeletePage(m_Parent->GetSelection());
|
|
|
|
|
m_ParentFrame->Refresh(TRUE);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/***************************************************************************/
|
|
|
|
|
void WinEDA_ModulePropertiesFrame::BuildPanelModuleProperties(bool FullOptions)
|
|
|
|
|
/***************************************************************************/
|
|
|
|
|
/* creation du panel d'edition des proprietes du module
|
|
|
|
|
*/
|
|
|
|
|
{
|
|
|
|
|
wxButton * Button;
|
|
|
|
|
wxStaticText* StaticText;
|
|
|
|
|
wxBoxSizer* PropLeftSizer;
|
|
|
|
|
wxBoxSizer* PropRightSizer;
|
|
|
|
|
wxString msg;
|
|
|
|
|
|
|
|
|
|
/* Create a sizer for controls in the left column */
|
|
|
|
|
PropLeftSizer = new wxBoxSizer(wxVERTICAL);
|
|
|
|
|
m_PanelPropertiesBoxSizer->Add(PropLeftSizer, 0, wxGROW|wxALL, 5);
|
|
|
|
|
/* Create a sizer for controls in the right column */
|
|
|
|
|
PropRightSizer = new wxBoxSizer(wxVERTICAL);
|
|
|
|
|
m_PanelPropertiesBoxSizer->Add(PropRightSizer, 0, wxGROW|wxALL, 5);
|
|
|
|
|
|
|
|
|
|
if ( FullOptions ) // Edition du module su le C.I.
|
|
|
|
|
{
|
|
|
|
|
Button = new wxButton(m_PanelProperties, ID_MODULE_PROPERTIES_EXCHANGE,
|
|
|
|
|
_("Change module(s)"));
|
|
|
|
|
Button->SetForegroundColour(wxColor(80,40,0));
|
|
|
|
|
PropRightSizer->Add(Button, 0, wxGROW|wxALL, 5);
|
|
|
|
|
Button = new wxButton(m_PanelProperties, ID_GOTO_MODULE_EDITOR,
|
|
|
|
|
_("Goto Module Editor"));
|
|
|
|
|
Button->SetForegroundColour(wxColor(0,128,80) );
|
|
|
|
|
PropRightSizer->Add(Button, 0, wxGROW|wxALL, 5);
|
|
|
|
|
}
|
|
|
|
|
else // Edition du module en librairie
|
|
|
|
|
{
|
|
|
|
|
StaticText = new wxStaticText( m_PanelProperties, wxID_STATIC, _("Doc"), wxDefaultPosition, wxDefaultSize, 0 );
|
|
|
|
|
PropLeftSizer->Add(StaticText, 0, wxGROW|wxLEFT|wxRIGHT|wxTOP|wxADJUST_MINSIZE, 5);
|
|
|
|
|
m_Doc = new wxTextCtrl(m_PanelProperties, -1,
|
|
|
|
|
m_CurrentModule->m_Doc);
|
|
|
|
|
PropLeftSizer->Add(m_Doc, 0, wxGROW|wxLEFT|wxRIGHT|wxBOTTOM, 5);
|
|
|
|
|
|
|
|
|
|
StaticText = new wxStaticText( m_PanelProperties, wxID_STATIC, _("Keywords"), wxDefaultPosition, wxDefaultSize, 0 );
|
|
|
|
|
PropLeftSizer->Add(StaticText, 0, wxGROW|wxLEFT|wxRIGHT|wxTOP|wxADJUST_MINSIZE, 5);
|
|
|
|
|
m_Keyword = new wxTextCtrl(m_PanelProperties, -1,
|
|
|
|
|
m_CurrentModule->m_KeyWord );
|
|
|
|
|
PropLeftSizer->Add(m_Keyword, 0, wxGROW|wxLEFT|wxRIGHT|wxBOTTOM, 5);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
wxStaticBox * box = new wxStaticBox(m_PanelProperties, -1, _("Fields:"));
|
|
|
|
|
m_TextListBox = new WinEDAChoiceBox(m_PanelProperties, ID_MODULE_LISTBOX_SELECT );
|
|
|
|
|
ReCreateFieldListBox();
|
|
|
|
|
m_TextListBox->SetSelection(0);
|
|
|
|
|
|
|
|
|
|
wxStaticBoxSizer* StaticBoxSizer = new wxStaticBoxSizer(box, wxVERTICAL);
|
|
|
|
|
PropLeftSizer->Add(StaticBoxSizer, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5);
|
|
|
|
|
StaticBoxSizer->Add(m_TextListBox, 0, wxGROW|wxALL, 5);
|
|
|
|
|
|
|
|
|
|
Button = new wxButton(m_PanelProperties, ID_MODULE_EDIT_ADD_TEXT,
|
|
|
|
|
_("Add Field"));
|
|
|
|
|
Button->SetForegroundColour(*wxBLACK);
|
|
|
|
|
StaticBoxSizer->Add(Button, 0, wxGROW|wxLEFT|wxRIGHT|wxTOP, 5);
|
|
|
|
|
|
|
|
|
|
Button = new wxButton(m_PanelProperties, ID_MODULE_EDIT_EDIT_TEXT,
|
|
|
|
|
_("Edit Field"));
|
|
|
|
|
Button->SetForegroundColour(*wxBLACK);
|
|
|
|
|
StaticBoxSizer->Add(Button, 0, wxGROW|wxLEFT|wxRIGHT, 5);
|
|
|
|
|
|
|
|
|
|
m_DeleteFieddButton = Button = new wxButton(m_PanelProperties, ID_MODULE_EDIT_DELETE_TEXT,
|
|
|
|
|
_("Delete Field"));
|
|
|
|
|
m_DeleteFieddButton->SetForegroundColour(*wxBLACK);
|
|
|
|
|
m_DeleteFieddButton->Enable(FALSE); // Enable pour fields autres que ref et valeur
|
|
|
|
|
StaticBoxSizer->Add(Button, 0, wxGROW|wxLEFT|wxRIGHT|wxBOTTOM, 5);
|
|
|
|
|
|
|
|
|
|
if ( FullOptions )
|
|
|
|
|
{
|
|
|
|
|
wxString layer_list[2] = { _("Componant"), _("Copper") };
|
|
|
|
|
m_LayerCtrl = new wxRadioBox( m_PanelProperties, -1, _("Layer"), wxDefaultPosition,
|
|
|
|
|
wxSize(-1,-1), 2, layer_list, 1);
|
|
|
|
|
m_LayerCtrl->SetSelection( (m_CurrentModule->m_Layer == CUIVRE_N) ? 1 : 0);
|
|
|
|
|
PropLeftSizer->Add(m_LayerCtrl, 0, wxGROW|wxALL, 5);
|
|
|
|
|
|
|
|
|
|
bool select = FALSE;
|
|
|
|
|
wxString orient_list[5] = {
|
|
|
|
|
_("Normal"), wxT("+ 90.0"), wxT("- 90.0"), wxT("180.0"), _("User") };
|
|
|
|
|
m_OrientCtrl = new wxRadioBox( m_PanelProperties, ID_LISTBOX_ORIENT_SELECT, _("Orient"),
|
|
|
|
|
wxDefaultPosition, wxSize(-1,-1), 5, orient_list, 1);
|
|
|
|
|
PropLeftSizer->Add(m_OrientCtrl, 0, wxGROW|wxALL, 5);
|
|
|
|
|
|
|
|
|
|
switch (m_CurrentModule->m_Orient)
|
|
|
|
|
{
|
|
|
|
|
case 0:
|
|
|
|
|
m_OrientCtrl->SetSelection( 0 );
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case 900:
|
|
|
|
|
case -2700:
|
|
|
|
|
m_OrientCtrl->SetSelection( 1 );
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case -900:
|
|
|
|
|
case 2700:
|
|
|
|
|
m_OrientCtrl->SetSelection( 2 );
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case -1800:
|
|
|
|
|
case 1800:
|
|
|
|
|
m_OrientCtrl->SetSelection( 3 );
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
default:
|
|
|
|
|
m_OrientCtrl->SetSelection( 4 );
|
|
|
|
|
select = TRUE;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
StaticText = new wxStaticText( m_PanelProperties,
|
|
|
|
|
wxID_STATIC, _("Orient (0.1 deg)"), wxDefaultPosition, wxDefaultSize, 0 );
|
|
|
|
|
PropLeftSizer->Add(StaticText, 0, wxGROW|wxLEFT|wxRIGHT|wxTOP|wxADJUST_MINSIZE, 5);
|
|
|
|
|
msg << m_CurrentModule->m_Orient;
|
|
|
|
|
m_OrientValue = new wxTextCtrl(m_PanelProperties, -1, msg);
|
|
|
|
|
m_OrientValue->Enable(select);
|
|
|
|
|
PropLeftSizer->Add(m_OrientValue, 0, wxGROW|wxLEFT|wxRIGHT|wxBOTTOM, 5);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Controls on right side of the dialog */
|
|
|
|
|
wxString attribut_list[3] = { _("Normal"), _("Normal+Insert"), _("Virtual") };
|
|
|
|
|
m_AttributsCtrl = new wxRadioBox( m_PanelProperties, -1, _("Attributs"), wxDefaultPosition,
|
|
|
|
|
wxSize(-1,-1), 3, attribut_list, 1);
|
|
|
|
|
PropRightSizer->Add(m_AttributsCtrl, 0, wxGROW|wxALL, 5);
|
|
|
|
|
|
|
|
|
|
switch (m_CurrentModule->m_Attributs & 255)
|
|
|
|
|
{
|
|
|
|
|
case 0:
|
|
|
|
|
m_AttributsCtrl->SetSelection( 0 );
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case MOD_CMS:
|
|
|
|
|
m_AttributsCtrl->SetSelection( 1 );
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case MOD_VIRTUAL:
|
|
|
|
|
m_AttributsCtrl->SetSelection( 2 );
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
default:
|
|
|
|
|
m_AttributsCtrl->SetSelection( 0 );
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
wxString autoplace_list[2] = { _("Free"), _("Locked")};
|
|
|
|
|
m_AutoPlaceCtrl = new wxRadioBox( m_PanelProperties, -1, _("Auto Place"), wxDefaultPosition,
|
|
|
|
|
wxSize(-1,-1), 2, autoplace_list, 1);
|
|
|
|
|
m_AutoPlaceCtrl->SetSelection(
|
|
|
|
|
(m_CurrentModule->m_ModuleStatus & MODULE_is_LOCKED) ? 1 : 0);
|
|
|
|
|
PropRightSizer->Add(m_AutoPlaceCtrl, 0, wxGROW|wxALL, 5);
|
|
|
|
|
|
|
|
|
|
StaticText = new wxStaticText(m_PanelProperties, -1, _("Rot 90"));
|
|
|
|
|
PropRightSizer->Add(StaticText, 0, wxGROW|wxLEFT|wxRIGHT|wxTOP|wxADJUST_MINSIZE, 5);
|
|
|
|
|
m_CostRot90Ctrl = new wxSlider(m_PanelProperties, -1,
|
|
|
|
|
m_CurrentModule->m_CntRot90, 0, 10, wxDefaultPosition, wxSize(100, -1),
|
|
|
|
|
wxSL_HORIZONTAL + wxSL_AUTOTICKS + wxSL_LABELS) ;
|
|
|
|
|
PropRightSizer->Add(m_CostRot90Ctrl, 0, wxGROW|wxLEFT|wxRIGHT|wxBOTTOM, 5);
|
|
|
|
|
|
|
|
|
|
StaticText = new wxStaticText(m_PanelProperties, -1, _("Rot 180"));
|
|
|
|
|
PropRightSizer->Add(StaticText, 0, wxGROW|wxLEFT|wxRIGHT|wxTOP|wxADJUST_MINSIZE, 5);
|
|
|
|
|
m_CostRot180Ctrl= new wxSlider(m_PanelProperties, -1,
|
|
|
|
|
m_CurrentModule->m_CntRot180, 0, 10, wxDefaultPosition, wxSize(100, -1),
|
|
|
|
|
wxSL_HORIZONTAL + wxSL_AUTOTICKS + wxSL_LABELS) ;
|
|
|
|
|
PropRightSizer->Add(m_CostRot180Ctrl, 0, wxGROW|wxLEFT|wxRIGHT|wxBOTTOM, 5);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**************************************************************/
|
|
|
|
|
Panel3D_Ctrl::Panel3D_Ctrl(WinEDA_ModulePropertiesFrame * parentframe,
|
|
|
|
|
wxNotebook * parent,
|
|
|
|
|
int id, Struct3D_Master * struct3D):
|
|
|
|
|
wxPanel(parent, id)
|
|
|
|
|
/**************************************************************/
|
|
|
|
|
/* create the dialog panel managing 3D shape infos
|
|
|
|
|
*/
|
|
|
|
|
{
|
|
|
|
|
wxButton * button;
|
|
|
|
|
S3D_Vertex dummy_vertex;
|
|
|
|
|
wxBoxSizer* PropLeftSizer;
|
|
|
|
|
wxBoxSizer* PropRightSizer;
|
|
|
|
|
|
|
|
|
|
m_Pnext = m_Pback = NULL;
|
|
|
|
|
|
|
|
|
|
m_Parent = parent;
|
|
|
|
|
m_ParentFrame = parentframe;
|
|
|
|
|
SetFont(*g_DialogFont);
|
|
|
|
|
wxBoxSizer * Panel3DBoxSizer = new wxBoxSizer(wxVERTICAL);
|
|
|
|
|
SetSizer(Panel3DBoxSizer);
|
|
|
|
|
|
|
|
|
|
wxStaticText* StaticText = new wxStaticText( this, wxID_STATIC, _("3D Shape Name"),
|
|
|
|
|
wxDefaultPosition, wxDefaultSize, 0 );
|
|
|
|
|
Panel3DBoxSizer->Add(StaticText, 0, wxGROW|wxALL|wxADJUST_MINSIZE, 5);
|
|
|
|
|
m_3D_ShapeName = new wxTextCtrl(this, -1, _T(""), wxDefaultPosition, wxDefaultSize, 0 );
|
|
|
|
|
if ( struct3D ) m_3D_ShapeName->SetValue(struct3D->m_Shape3DName);
|
|
|
|
|
Panel3DBoxSizer->Add(m_3D_ShapeName, 0, wxGROW|wxALL, 5);
|
|
|
|
|
|
|
|
|
|
wxBoxSizer * LowerBoxSizer = new wxBoxSizer(wxHORIZONTAL);
|
|
|
|
|
Panel3DBoxSizer->Add(LowerBoxSizer, 0, wxGROW|wxALL, 5);
|
|
|
|
|
/* Create a sizer for controls in the left column */
|
|
|
|
|
PropLeftSizer = new wxBoxSizer(wxVERTICAL);
|
|
|
|
|
LowerBoxSizer->Add(PropLeftSizer, 0, wxGROW|wxALL, 5);
|
|
|
|
|
/* Create a sizer for controls in the right column */
|
|
|
|
|
PropRightSizer = new wxBoxSizer(wxVERTICAL);
|
|
|
|
|
LowerBoxSizer->Add(PropRightSizer, 0, wxGROW|wxALL, 5);
|
|
|
|
|
|
|
|
|
|
button = new wxButton(this, ID_BROWSE_3D_LIB, _("Browse"));
|
|
|
|
|
button->SetForegroundColour(*wxBLUE);
|
|
|
|
|
PropRightSizer->Add(button, 0, wxGROW|wxLEFT|wxRIGHT, 5);
|
|
|
|
|
|
|
|
|
|
button = new wxButton(this, ID_ADD_3D_SHAPE, _("Add 3D Shape"));
|
|
|
|
|
button->SetForegroundColour(*wxRED);
|
|
|
|
|
PropRightSizer->Add(button, 0, wxGROW|wxLEFT|wxRIGHT, 5);
|
|
|
|
|
|
|
|
|
|
if ( (struct3D == NULL) || (struct3D->Pback != NULL) )
|
|
|
|
|
{
|
|
|
|
|
button = new wxButton(this, ID_REMOVE_3D_SHAPE, _("Remove 3D Shape"));
|
|
|
|
|
button->SetForegroundColour(*wxRED);
|
|
|
|
|
PropRightSizer->Add(button, 0, wxGROW|wxLEFT|wxRIGHT, 5);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
wxBoxSizer * BoxSizer = new wxBoxSizer(wxVERTICAL);
|
|
|
|
|
m_3D_Scale = new WinEDA_VertexCtrl(this, _("Shape Scale:"), BoxSizer,
|
|
|
|
|
2, 1);
|
|
|
|
|
if ( struct3D ) m_3D_Scale->SetValue(struct3D->m_MatScale);
|
|
|
|
|
PropLeftSizer->Add(BoxSizer, 0, wxGROW|wxALL, 5);
|
|
|
|
|
|
|
|
|
|
BoxSizer = new wxBoxSizer(wxVERTICAL);
|
|
|
|
|
m_3D_Offset = new WinEDA_VertexCtrl(this, _("Shape Offset:"), BoxSizer,
|
|
|
|
|
2, 1);
|
|
|
|
|
if ( struct3D ) m_3D_Offset->SetValue(struct3D->m_MatPosition);
|
|
|
|
|
else m_3D_Offset->SetValue(dummy_vertex);
|
|
|
|
|
PropLeftSizer->Add(BoxSizer, 0, wxGROW|wxALL, 5);
|
|
|
|
|
|
|
|
|
|
BoxSizer = new wxBoxSizer(wxVERTICAL);
|
|
|
|
|
m_3D_Rotation = new WinEDA_VertexCtrl(this, _("Shape Rotation:"), BoxSizer,
|
|
|
|
|
2, 1);
|
|
|
|
|
if ( struct3D ) m_3D_Rotation->SetValue(struct3D->m_MatRotation);
|
|
|
|
|
else m_3D_Rotation->SetValue(dummy_vertex);
|
|
|
|
|
PropLeftSizer->Add(BoxSizer, 0, wxGROW|wxALL, 5);
|
|
|
|
|
|
|
|
|
|
if ( struct3D == NULL )
|
|
|
|
|
{
|
|
|
|
|
dummy_vertex.x = dummy_vertex.y = dummy_vertex.z = 1.0;
|
|
|
|
|
m_3D_Scale->SetValue(dummy_vertex);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/********************************/
|
|
|
|
|
Panel3D_Ctrl::~Panel3D_Ctrl(void)
|
|
|
|
|
/********************************/
|
|
|
|
|
{
|
|
|
|
|
delete m_3D_ShapeName;
|
|
|
|
|
delete m_3D_Scale;
|
|
|
|
|
delete m_3D_Offset;
|
|
|
|
|
delete m_3D_Rotation;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/***************************************************/
|
|
|
|
|
void Panel3D_Ctrl::Browse3DLib(wxCommandEvent& event)
|
|
|
|
|
/***************************************************/
|
|
|
|
|
{
|
|
|
|
|
wxString fullfilename, shortfilename;
|
|
|
|
|
wxString fullpath = g_RealLibDirBuffer;
|
|
|
|
|
wxString mask = wxT("*");
|
|
|
|
|
|
|
|
|
|
fullpath += LIB3D_PATH;
|
|
|
|
|
mask += g_Shapes3DExtBuffer;
|
|
|
|
|
#ifdef __WINDOWS__
|
|
|
|
|
fullpath.Replace( wxT("/"), wxT("\\") );
|
|
|
|
|
#endif
|
|
|
|
|
fullfilename = EDA_FileSelector( _("3D Shape:"),
|
|
|
|
|
fullpath, /* Chemin par defaut */
|
|
|
|
|
wxEmptyString, /* nom fichier par defaut */
|
|
|
|
|
g_Shapes3DExtBuffer, /* extension par defaut */
|
|
|
|
|
mask, /* Masque d'affichage */
|
|
|
|
|
this,
|
|
|
|
|
wxFD_OPEN,
|
|
|
|
|
TRUE
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
if ( fullfilename == wxEmptyString ) return;
|
|
|
|
|
|
|
|
|
|
shortfilename = MakeReducedFileName( fullfilename,
|
|
|
|
|
fullpath, wxEmptyString);
|
|
|
|
|
m_3D_ShapeName->SetValue(shortfilename);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**********************************************************************/
|
|
|
|
|
void WinEDA_ModulePropertiesFrame::OnQuit(wxCommandEvent& WXUNUSED(event))
|
|
|
|
|
/**********************************************************************/
|
|
|
|
|
{
|
|
|
|
|
Close(true); // true is to force the frame to close
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/******************************************************************************/
|
|
|
|
|
void WinEDA_ModulePropertiesFrame::ModulePropertiesAccept(wxCommandEvent& event)
|
|
|
|
|
/******************************************************************************/
|
|
|
|
|
{
|
|
|
|
|
bool change_layer = FALSE;
|
|
|
|
|
|
|
|
|
|
if ( m_DC ) m_Parent->DrawPanel->CursorOff(m_DC);
|
|
|
|
|
|
|
|
|
|
if ( m_DC )
|
|
|
|
|
m_CurrentModule->Draw(m_Parent->DrawPanel, m_DC, wxPoint(0,0), GR_XOR);
|
|
|
|
|
|
|
|
|
|
if ( m_OrientValue )
|
|
|
|
|
{
|
|
|
|
|
long orient = 0; wxString msg = m_OrientValue->GetValue();
|
|
|
|
|
msg.ToLong(&orient);
|
|
|
|
|
if( m_CurrentModule->m_Orient != orient)
|
|
|
|
|
m_Parent->Rotate_Module(m_DC, m_CurrentModule,
|
|
|
|
|
orient, FALSE);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ( m_LayerCtrl )
|
|
|
|
|
{
|
|
|
|
|
if ( m_LayerCtrl->GetSelection() == 0 ) // layer req = COMPONENT
|
|
|
|
|
{
|
|
|
|
|
if( m_CurrentModule->m_Layer == CUIVRE_N) change_layer = TRUE;
|
|
|
|
|
}
|
|
|
|
|
else if( m_CurrentModule->m_Layer == CMP_N ) change_layer = TRUE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ( change_layer )
|
|
|
|
|
{
|
|
|
|
|
m_Parent->Change_Side_Module(m_CurrentModule, m_DC);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (m_AutoPlaceCtrl->GetSelection() == 1)
|
|
|
|
|
m_CurrentModule->m_ModuleStatus |= MODULE_is_LOCKED;
|
|
|
|
|
else m_CurrentModule->m_ModuleStatus &= ~MODULE_is_LOCKED;
|
|
|
|
|
|
|
|
|
|
switch (m_AttributsCtrl->GetSelection())
|
|
|
|
|
{
|
|
|
|
|
case 0:
|
|
|
|
|
m_CurrentModule->m_Attributs = 0;
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case 1:
|
|
|
|
|
m_CurrentModule->m_Attributs = MOD_CMS;
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case 2:
|
|
|
|
|
m_CurrentModule->m_Attributs = MOD_VIRTUAL;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
m_CurrentModule->m_CntRot90 = m_CostRot90Ctrl->GetValue();
|
|
|
|
|
m_CurrentModule->m_CntRot180 = m_CostRot180Ctrl->GetValue();
|
|
|
|
|
if ( m_Doc ) m_CurrentModule->m_Doc = m_Doc->GetValue();
|
|
|
|
|
if ( m_Keyword ) m_CurrentModule->m_KeyWord = m_Keyword->GetValue();
|
|
|
|
|
|
|
|
|
|
/* Mise a jour des parametres 3D */
|
|
|
|
|
Panel3D_Ctrl * panel3D = m_Panel3D;
|
|
|
|
|
Struct3D_Master *draw3D = m_CurrentModule->m_3D_Drawings,
|
|
|
|
|
* nextdraw3D;
|
|
|
|
|
for ( ; panel3D != NULL; panel3D = panel3D->m_Pnext )
|
|
|
|
|
{
|
|
|
|
|
draw3D->m_Shape3DName = panel3D->m_3D_ShapeName->GetValue();
|
|
|
|
|
draw3D->m_MatScale = panel3D->m_3D_Scale->GetValue();
|
|
|
|
|
draw3D->m_MatRotation = panel3D->m_3D_Rotation->GetValue();
|
|
|
|
|
draw3D->m_MatPosition = panel3D->m_3D_Offset->GetValue();
|
|
|
|
|
if ( (draw3D->m_Shape3DName.IsEmpty() ) &&
|
|
|
|
|
(draw3D != m_CurrentModule->m_3D_Drawings) )
|
|
|
|
|
continue;
|
|
|
|
|
if ( (draw3D->Pnext == NULL) && panel3D->m_Pnext )
|
|
|
|
|
{
|
|
|
|
|
nextdraw3D = new Struct3D_Master(draw3D);
|
|
|
|
|
nextdraw3D->Pback = draw3D;
|
|
|
|
|
draw3D->Pnext = nextdraw3D;
|
|
|
|
|
}
|
|
|
|
|
draw3D = (Struct3D_Master *) draw3D->Pnext;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for ( ; draw3D != NULL; draw3D = nextdraw3D )
|
|
|
|
|
{
|
|
|
|
|
nextdraw3D = (Struct3D_Master *)draw3D->Pnext;
|
|
|
|
|
(draw3D->Pback)->Pnext = NULL;
|
|
|
|
|
delete draw3D;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
m_CurrentModule->Set_Rectangle_Encadrement();
|
|
|
|
|
|
|
|
|
|
m_Parent->GetScreen()->SetModify();
|
|
|
|
|
|
|
|
|
|
Close(TRUE);
|
|
|
|
|
|
|
|
|
|
if ( m_DC )
|
|
|
|
|
m_CurrentModule->Draw(m_Parent->DrawPanel, m_DC, wxPoint(0,0), GR_OR);
|
|
|
|
|
if ( m_DC ) m_Parent->DrawPanel->CursorOn(m_DC);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/************************************************************************/
|
|
|
|
|
void WinEDA_ModulePropertiesFrame::GotoModuleEditor(wxCommandEvent& event)
|
|
|
|
|
/************************************************************************/
|
|
|
|
|
{
|
|
|
|
|
GoToEditor = TRUE;
|
|
|
|
|
if ( m_CurrentModule->m_TimeStamp == 0 ) // Module Editor needs a non null timestamp
|
|
|
|
|
{
|
|
|
|
|
m_CurrentModule->m_TimeStamp = GetTimeStamp();
|
|
|
|
|
m_Parent->GetScreen()->SetModify();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Close(TRUE);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**********************************************************************/
|
|
|
|
|
void WinEDA_ModulePropertiesFrame::ExchangeModule(wxCommandEvent& event)
|
|
|
|
|
/**********************************************************************/
|
|
|
|
|
{
|
|
|
|
|
m_Parent->InstallExchangeModuleFrame( m_CurrentModule,
|
|
|
|
|
m_DC, wxPoint(-1,-1) );
|
|
|
|
|
// Attention: si il y a eu echange, m_CurrentModule a <20>t<EFBFBD> delete!
|
|
|
|
|
m_Parent->GetScreen()->m_CurrentItem = NULL;
|
|
|
|
|
Close(TRUE);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*************************************************************************/
|
|
|
|
|
void WinEDA_ModulePropertiesFrame::ModuleOrientEvent(wxCommandEvent& event)
|
|
|
|
|
/*************************************************************************/
|
|
|
|
|
{
|
|
|
|
|
switch ( m_OrientCtrl->GetSelection() )
|
|
|
|
|
{
|
|
|
|
|
case 0:
|
|
|
|
|
m_OrientValue->Enable(FALSE);
|
|
|
|
|
m_OrientValue->SetValue( wxT("0") );
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case 1:
|
|
|
|
|
m_OrientValue->Enable(FALSE);
|
|
|
|
|
m_OrientValue->SetValue( wxT("900") );
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case 2:
|
|
|
|
|
m_OrientValue->Enable(FALSE);
|
|
|
|
|
m_OrientValue->SetValue( wxT("2700") );
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case 3:
|
|
|
|
|
m_OrientValue->Enable(FALSE);
|
|
|
|
|
m_OrientValue->SetValue( wxT("1800") );
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
default:
|
|
|
|
|
m_OrientValue->Enable(FALSE);
|
|
|
|
|
m_OrientValue->Enable(TRUE);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*************************************************************************/
|
|
|
|
|
void WinEDA_ModulePropertiesFrame::SelectTextListBox(wxCommandEvent& event)
|
|
|
|
|
/*************************************************************************/
|
|
|
|
|
{
|
|
|
|
|
SetTextListButtons();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*************************************************************************/
|
|
|
|
|
void WinEDA_ModulePropertiesFrame::SetTextListButtons(void)
|
|
|
|
|
/*************************************************************************/
|
|
|
|
|
{
|
|
|
|
|
int choice = m_TextListBox->GetChoice();
|
|
|
|
|
|
|
|
|
|
if ( m_DeleteFieddButton == NULL ) return;
|
|
|
|
|
|
|
|
|
|
if ( choice > 1 ) // Texte autre que ref ou valeur selectionne
|
|
|
|
|
{
|
|
|
|
|
m_DeleteFieddButton->Enable(TRUE);
|
|
|
|
|
}
|
|
|
|
|
else m_DeleteFieddButton->Enable(FALSE);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/***********************************************************/
|
|
|
|
|
void WinEDA_ModulePropertiesFrame::ReCreateFieldListBox(void)
|
|
|
|
|
/***********************************************************/
|
|
|
|
|
{
|
|
|
|
|
m_TextListBox->Clear();
|
|
|
|
|
|
|
|
|
|
m_TextListBox->Append(m_CurrentModule->m_Reference->m_Text);
|
|
|
|
|
m_TextListBox->Append(m_CurrentModule->m_Value->m_Text);
|
|
|
|
|
|
|
|
|
|
EDA_BaseStruct * item = m_CurrentModule->m_Drawings;
|
|
|
|
|
while ( item )
|
|
|
|
|
{
|
|
|
|
|
if( item->m_StructType == TYPETEXTEMODULE )
|
|
|
|
|
m_TextListBox->Append( ((TEXTE_MODULE*)item)->m_Text );
|
|
|
|
|
item = item->Pnext;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
SetTextListButtons();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/************************************************************************/
|
|
|
|
|
void WinEDA_ModulePropertiesFrame::CreateTextModule(wxCommandEvent& event)
|
|
|
|
|
/************************************************************************/
|
|
|
|
|
/* Cree un nouveau texte sur le module actif
|
|
|
|
|
Le texte sera mis en fonction Move
|
|
|
|
|
*/
|
|
|
|
|
{
|
|
|
|
|
TEXTE_MODULE * Text;
|
|
|
|
|
|
|
|
|
|
/* Creation de la place en memoire : */
|
|
|
|
|
Text = m_Parent->CreateTextModule(m_CurrentModule, m_DC);
|
|
|
|
|
|
|
|
|
|
ReCreateFieldListBox();
|
|
|
|
|
m_TextListBox->SetSelection(2);
|
|
|
|
|
SetTextListButtons();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/****************************************************************************/
|
|
|
|
|
void WinEDA_ModulePropertiesFrame::EditOrDelTextModule(wxCommandEvent& event)
|
|
|
|
|
/****************************************************************************/
|
|
|
|
|
{
|
|
|
|
|
int TextType = m_TextListBox->GetChoice();
|
|
|
|
|
TEXTE_MODULE * Text = NULL;
|
|
|
|
|
|
|
|
|
|
if ( TextType < 0 ) return; //No selection
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if ( m_DC ) m_Parent->DrawPanel->CursorOff(m_DC);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Get a pointer on the field
|
|
|
|
|
if ( TextType == 0 ) Text = m_CurrentModule->m_Reference;
|
|
|
|
|
else if ( TextType == 1 ) Text = m_CurrentModule->m_Value;
|
|
|
|
|
else // Search the field 2 or more, because field 0 and 1 are ref and value
|
|
|
|
|
{
|
|
|
|
|
EDA_BaseStruct * item = m_CurrentModule->m_Drawings;
|
|
|
|
|
int jj = 2;
|
|
|
|
|
while ( item )
|
|
|
|
|
{
|
|
|
|
|
if( item->m_StructType == TYPETEXTEMODULE )
|
|
|
|
|
{
|
|
|
|
|
if ( jj == TextType ) // Texte trouv<75>
|
|
|
|
|
{
|
|
|
|
|
Text = (TEXTE_MODULE*)item;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
item = item->Pnext; jj++;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ( Text )
|
|
|
|
|
{
|
|
|
|
|
if ( event.GetId() == ID_MODULE_EDIT_DELETE_TEXT )
|
|
|
|
|
{
|
|
|
|
|
if ( TextType < 2 ) // Ref or Value cannot be deleted
|
|
|
|
|
{
|
|
|
|
|
DisplayError(this, _("Reference or Value cannot be deleted") );
|
|
|
|
|
goto out;
|
|
|
|
|
}
|
|
|
|
|
wxString Line;
|
|
|
|
|
Line.Printf( _("Delete [%s]"), Text->m_Text.GetData() );
|
|
|
|
|
if ( !IsOK(this, Line ) ) goto out;
|
|
|
|
|
m_Parent->DeleteTextModule(Text, m_DC);
|
|
|
|
|
ReCreateFieldListBox();
|
|
|
|
|
m_TextListBox->SetSelection(0);
|
|
|
|
|
}
|
|
|
|
|
else // Edition du champ
|
|
|
|
|
{
|
|
|
|
|
m_Parent->InstallTextModOptionsFrame(Text, m_DC, wxPoint(-1,-1) );
|
|
|
|
|
ReCreateFieldListBox();
|
|
|
|
|
m_TextListBox->SetSelection(TextType);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
else DisplayError(this,
|
|
|
|
|
wxT("WinEDA_ModulePropertiesFrame::EditOrDelTextModule() error: Field not found"));
|
|
|
|
|
|
|
|
|
|
out:
|
|
|
|
|
if ( m_DC ) m_Parent->DrawPanel->CursorOn(m_DC);
|
|
|
|
|
SetTextListButtons();
|
|
|
|
|
}
|