|
|
/*****************************************************/ /* 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) {};
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(void);
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(void)/*******************************************/{ 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; }}
|