kicad/eeschema/eestatus.cpp

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;
}
}