333 lines
8.8 KiB
C++
333 lines
8.8 KiB
C++
/*****************************************************/
|
|
/* Gestion de la configuration generale de EESCHEMA */
|
|
/*****************************************************/
|
|
/* Gestion de la fenetre de selection des librarires actives, de leur chemin
|
|
et du format des netlistes générées
|
|
*/
|
|
|
|
#include "fctsys.h"
|
|
|
|
#include "common.h"
|
|
#include "program.h"
|
|
#include "libcmp.h"
|
|
#include "general.h"
|
|
|
|
#include "protos.h"
|
|
#include "netlist.h"
|
|
|
|
#include "id.h"
|
|
|
|
|
|
/* Fonctions Locales */
|
|
|
|
/***********/
|
|
|
|
enum {
|
|
SAVE_CFG = 1000,
|
|
DEL_LIB,
|
|
ADD_LIB,
|
|
INSERT_LIB,
|
|
FORMAT_NETLIST
|
|
};
|
|
|
|
/* Forward declarations */
|
|
|
|
/* Routines Locales */
|
|
|
|
/*************************************************/
|
|
/* classe derivee pour la frame de Configuration */
|
|
/*************************************************/
|
|
|
|
class WinEDA_ConfigFrame: public wxDialog
|
|
{
|
|
private:
|
|
protected:
|
|
public:
|
|
|
|
WinEDA_SchematicFrame * m_Parent;
|
|
wxListBox * m_ListLibr;
|
|
wxRadioBox *m_NetFormatBox;
|
|
bool m_LibListChanged;
|
|
WinEDA_EnterText * LibDirCtrl;
|
|
|
|
// Constructor and destructor
|
|
WinEDA_ConfigFrame(WinEDA_SchematicFrame *parent, const wxPoint& pos);
|
|
~WinEDA_ConfigFrame() {};
|
|
|
|
void OnCloseWindow(wxCloseEvent & event);
|
|
|
|
void CreateListFormatsNetListes(const wxPoint & pos);
|
|
|
|
void SaveCfg(wxCommandEvent& event);
|
|
void LibDelFct(wxCommandEvent& event);
|
|
void AddOrInsertLibrary(wxCommandEvent& event);
|
|
void ReturnNetFormat(wxCommandEvent& event);
|
|
void ChangeSetup();
|
|
|
|
DECLARE_EVENT_TABLE()
|
|
|
|
};
|
|
/* Construction de la table des evenements pour WinEDA_ConfigFrame */
|
|
BEGIN_EVENT_TABLE(WinEDA_ConfigFrame, wxDialog)
|
|
EVT_BUTTON(SAVE_CFG, WinEDA_ConfigFrame::SaveCfg)
|
|
EVT_BUTTON(DEL_LIB, WinEDA_ConfigFrame::LibDelFct)
|
|
EVT_BUTTON(ADD_LIB, WinEDA_ConfigFrame::AddOrInsertLibrary)
|
|
EVT_BUTTON(INSERT_LIB, WinEDA_ConfigFrame::AddOrInsertLibrary)
|
|
EVT_RADIOBOX(FORMAT_NETLIST, WinEDA_ConfigFrame::ReturnNetFormat)
|
|
EVT_CLOSE(WinEDA_ConfigFrame::OnCloseWindow)
|
|
END_EVENT_TABLE()
|
|
|
|
/******************************************************************/
|
|
void WinEDA_SchematicFrame::InstallConfigFrame(const wxPoint & pos)
|
|
/******************************************************************/
|
|
{
|
|
WinEDA_ConfigFrame * CfgFrame = new WinEDA_ConfigFrame(this, pos);
|
|
CfgFrame->ShowModal(); CfgFrame->Destroy();
|
|
}
|
|
|
|
|
|
#define X_SIZE 500
|
|
#define Y_SIZE 360
|
|
|
|
/********************************************************************/
|
|
WinEDA_ConfigFrame::WinEDA_ConfigFrame(WinEDA_SchematicFrame *parent,
|
|
const wxPoint& framepos):
|
|
wxDialog(parent, -1, wxEmptyString, framepos, wxSize(X_SIZE, Y_SIZE),
|
|
DIALOG_STYLE )
|
|
/*****************************************************************/
|
|
/* Constructeur de WinEDA_ConfigFrame: la fenetre de config des librairies
|
|
*/
|
|
{
|
|
wxPoint pos;
|
|
wxSize size;
|
|
int dimy;
|
|
wxString msg;
|
|
wxButton * Button;
|
|
|
|
m_Parent = parent;
|
|
m_LibListChanged = FALSE;
|
|
SetFont(*g_DialogFont);
|
|
|
|
msg = _("from ") + EDA_Appl->m_CurrentOptionFile;
|
|
SetTitle(msg);
|
|
|
|
/* Creation des boutons de commande */
|
|
pos.x = 10; pos.y = 5;
|
|
Button = new wxButton(this, SAVE_CFG, _("Save Cfg"), pos);
|
|
Button->SetForegroundColour(*wxRED);
|
|
|
|
pos.x = 230;
|
|
Button = new wxButton(this, DEL_LIB, _("Del"), pos);
|
|
Button->SetForegroundColour(*wxRED);
|
|
|
|
pos.x += Button->GetSize().x;
|
|
Button = new wxButton(this, ADD_LIB, _("Add"), pos );
|
|
Button->SetForegroundColour(wxColor(0,80,0));
|
|
|
|
pos.x += Button->GetSize().x;
|
|
Button = new wxButton(this, INSERT_LIB, _("Ins"), pos );
|
|
Button->SetForegroundColour(*wxBLUE);
|
|
|
|
pos.x = 10; pos.y = 45;
|
|
CreateListFormatsNetListes(pos);
|
|
|
|
pos.x = 235; pos.y = 55;
|
|
m_ListLibr = new wxListBox(this,
|
|
-1, pos, wxSize(X_SIZE - pos.x -10,225),
|
|
0,NULL,
|
|
wxLB_ALWAYS_SB|wxLB_SINGLE);
|
|
wxStaticText * Msg = new wxStaticText(this, -1, _("Libraries"),
|
|
wxPoint(pos.x, pos.y - 14) );
|
|
Msg->SetForegroundColour(wxColour(200,0,0) );
|
|
m_ListLibr->InsertItems(g_LibName_List, 0);
|
|
|
|
// Affichage des extensions des différents fichiers:
|
|
dimy = 17;
|
|
pos.x = 10;
|
|
pos.y = m_NetFormatBox->GetPosition().y + m_NetFormatBox->GetSize().y + 10;
|
|
wxStaticBox * Box = new wxStaticBox(this, -1, _("Files ext:"), pos, wxSize(180,110) );
|
|
pos.y += 20; pos.x += 10;
|
|
msg = _("Cmp file Ext: ") + g_NetCmpExtBuffer;
|
|
wxStaticText * text = new wxStaticText(this, -1, msg, pos);
|
|
|
|
pos.y += dimy;
|
|
msg = _("Net file Ext: ") + g_NetExtBuffer;
|
|
text = new wxStaticText(this, -1, msg, pos);
|
|
|
|
pos.y += dimy;
|
|
msg = _("Library file Ext: ") + g_LibExtBuffer;
|
|
text = new wxStaticText(this, -1, msg, pos);
|
|
|
|
pos.y += dimy;
|
|
msg = _("Symbol file Ext: ") + g_SymbolExtBuffer;
|
|
text = new wxStaticText(this, -1, msg, pos);
|
|
|
|
pos.y += dimy;
|
|
msg = _("Schematic file Ext: ") + g_SchExtBuffer;
|
|
text = new wxStaticText(this, -1, msg, pos);
|
|
|
|
|
|
int posY = Box->GetPosition().y + Box->GetSize().y + 30;
|
|
pos.x = 10; pos.y = MAX(310, posY);
|
|
size.x = X_SIZE - pos.x -10; size.y = -1;
|
|
LibDirCtrl = new WinEDA_EnterText(this,
|
|
_("Library files path:"), g_UserLibDirBuffer,
|
|
pos, size);
|
|
pos.y += LibDirCtrl->GetDimension().y + 5;
|
|
|
|
SetClientSize(wxSize(X_SIZE, pos.y) );
|
|
}
|
|
|
|
|
|
/***********************************************************/
|
|
void WinEDA_ConfigFrame::OnCloseWindow(wxCloseEvent & event)
|
|
/***********************************************************/
|
|
{
|
|
ChangeSetup();
|
|
if ( m_LibListChanged )
|
|
{
|
|
LoadLibraries(m_Parent);
|
|
if ( m_Parent->m_Parent->ViewlibFrame )
|
|
m_Parent->m_Parent->ViewlibFrame->ReCreateListLib();
|
|
}
|
|
EndModal(0);
|
|
}
|
|
|
|
|
|
/*******************************************/
|
|
void WinEDA_ConfigFrame::ChangeSetup()
|
|
/*******************************************/
|
|
{
|
|
g_UserLibDirBuffer = LibDirCtrl->GetData();
|
|
SetRealLibraryPath( wxT("library") );
|
|
}
|
|
|
|
|
|
/******************************************************/
|
|
void WinEDA_ConfigFrame::SaveCfg(wxCommandEvent& event)
|
|
/******************************************************/
|
|
{
|
|
ChangeSetup();
|
|
m_Parent->Save_Config(this);
|
|
}
|
|
|
|
/********************************************************/
|
|
void WinEDA_ConfigFrame::LibDelFct(wxCommandEvent& event)
|
|
/********************************************************/
|
|
{
|
|
int ii;
|
|
|
|
ii = m_ListLibr->GetSelection();
|
|
if ( ii < 0 ) return;
|
|
|
|
g_LibName_List.RemoveAt(ii);
|
|
m_ListLibr->Clear();
|
|
m_ListLibr->InsertItems(g_LibName_List, 0);
|
|
m_LibListChanged = TRUE;
|
|
}
|
|
|
|
/****************************************************************/
|
|
void WinEDA_ConfigFrame::AddOrInsertLibrary(wxCommandEvent& event)
|
|
/****************************************************************/
|
|
/* Insert or add a library to the existing library list:
|
|
New library is put in list before (insert) or after (add)
|
|
the selection
|
|
*/
|
|
{
|
|
int ii;
|
|
wxString FullLibName,ShortLibName, Mask;
|
|
|
|
ii = m_ListLibr->GetSelection();
|
|
if ( ii < 0 ) ii = 0;
|
|
ChangeSetup();
|
|
if( event.GetId() == ADD_LIB)
|
|
{
|
|
if( g_LibName_List.GetCount() != 0 ) ii ++; /* Add after selection */
|
|
}
|
|
|
|
Mask = wxT("*") + g_LibExtBuffer;
|
|
FullLibName = EDA_FileSelector( _("Library files:"),
|
|
g_RealLibDirBuffer, /* Chemin par defaut */
|
|
wxEmptyString, /* nom fichier par defaut */
|
|
g_LibExtBuffer, /* extension par defaut */
|
|
Mask, /* Masque d'affichage */
|
|
this,
|
|
wxFD_OPEN,
|
|
TRUE
|
|
);
|
|
|
|
if ( FullLibName.IsEmpty() ) return;
|
|
|
|
ShortLibName = MakeReducedFileName(FullLibName,g_RealLibDirBuffer,g_LibExtBuffer);
|
|
|
|
//Add or insert new library name
|
|
if (FindLibrary(ShortLibName) == NULL)
|
|
{
|
|
m_LibListChanged = TRUE;
|
|
g_LibName_List.Insert(ShortLibName, ii);
|
|
m_ListLibr->Clear();
|
|
m_ListLibr->InsertItems(g_LibName_List, 0);
|
|
}
|
|
|
|
else DisplayError(this, _("Library already in use"));
|
|
|
|
}
|
|
|
|
|
|
|
|
/**************************************************************/
|
|
void WinEDA_ConfigFrame::ReturnNetFormat(wxCommandEvent& event)
|
|
/**************************************************************/
|
|
{
|
|
int ii;
|
|
|
|
ii = m_NetFormatBox->GetSelection();
|
|
if ( ii == 0 ) g_NetFormat = NET_TYPE_PCBNEW;
|
|
if ( ii == 1 ) g_NetFormat = NET_TYPE_ORCADPCB2;
|
|
else if ( ii == 2 ) g_NetFormat = NET_TYPE_CADSTAR;
|
|
else if ( ii == 3 ) g_NetFormat = NET_TYPE_SPICE;
|
|
else if ( g_NetFormat < NET_TYPE_CUSTOM1 ) g_NetFormat = NET_TYPE_CUSTOM1;
|
|
}
|
|
|
|
|
|
/***********************************************************************/
|
|
void WinEDA_ConfigFrame::CreateListFormatsNetListes(const wxPoint & pos)
|
|
/***********************************************************************/
|
|
/* Message de wxRadioBox de selection type netliste */
|
|
|
|
{
|
|
wxString Net_Select[] =
|
|
{ wxT("&PcbNew"), wxT("&OrcadPcb2"), wxT("&CadStar"), wxT("&Spice"), wxT("Other")};
|
|
|
|
m_NetFormatBox = new wxRadioBox(this, FORMAT_NETLIST,
|
|
_("NetList Formats:"),
|
|
pos, wxSize(-1,-1),
|
|
5, Net_Select, 1, wxRA_SPECIFY_COLS);
|
|
|
|
switch( g_NetFormat )
|
|
{
|
|
case NET_TYPE_NOT_INIT:
|
|
case NET_TYPE_PCBNEW:
|
|
m_NetFormatBox->SetSelection(0);
|
|
break;
|
|
|
|
case NET_TYPE_ORCADPCB2:
|
|
m_NetFormatBox->SetSelection(1);
|
|
break;
|
|
|
|
case NET_TYPE_CADSTAR:
|
|
m_NetFormatBox->SetSelection(2);
|
|
break;
|
|
|
|
case NET_TYPE_SPICE:
|
|
m_NetFormatBox->SetSelection(3);
|
|
break;
|
|
|
|
default:
|
|
m_NetFormatBox->SetSelection(4);
|
|
break;
|
|
}
|
|
}
|
|
|
|
|