/********************************************/ /* PCBNEW - Gestion des Options et Reglages */ /********************************************/ /* Fichier reglage.cpp */ /* Affichage et modifications des parametres de travail de PcbNew Parametres = dimensions des via, pistes, isolements, options... */ #include "fctsys.h" #include "gr_basic.h" #include "common.h" #include "pcbnew.h" #include "pcbplot.h" #include "protos.h" enum { SAVE_CFG = 1000, DEL_LIB, ADD_LIB, INSERT_LIB, FORMAT_NETLIST }; /* Routines Locales */ /*************************************************/ /* classe derivee pour la frame de Configuration */ /*************************************************/ class WinEDA_ConfigFrame: public wxDialog { public: WinEDA_PcbFrame * m_Parent; wxListBox * ListLibr; int LibModified; WinEDA_EnterText * m_TextLibDir; WinEDA_EnterText * m_TextHelpModulesFileName; public: // Constructor and destructor WinEDA_ConfigFrame(WinEDA_PcbFrame *parent,const wxPoint& pos); ~WinEDA_ConfigFrame(void) {}; private: void OnCloseWindow(wxCloseEvent & event); void SaveCfg(wxCommandEvent& event); void LibDelFct(wxCommandEvent& event); void LibInsertFct(wxCommandEvent& event); void SetNewOptions(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::LibInsertFct) EVT_BUTTON(INSERT_LIB, WinEDA_ConfigFrame::LibInsertFct) EVT_CLOSE(WinEDA_ConfigFrame::OnCloseWindow) END_EVENT_TABLE() /*****************************************************************/ void WinEDA_PcbFrame::InstallConfigFrame(const wxPoint & pos) /*****************************************************************/ { WinEDA_ConfigFrame * CfgFrame = new WinEDA_ConfigFrame(this, pos); CfgFrame->ShowModal(); CfgFrame->Destroy(); } /************************************************************/ /* Constructeur de WinEDA_ConfigFrame: la fenetre de config */ /************************************************************/ #define X_SIZE 450 #define Y_SIZE 380 WinEDA_ConfigFrame::WinEDA_ConfigFrame(WinEDA_PcbFrame *parent, const wxPoint& framepos): wxDialog(parent, -1, "", framepos, wxSize(X_SIZE, Y_SIZE), DIALOG_STYLE ) { wxPoint pos; wxSize size; wxString title; wxButton * Button; m_Parent = parent; SetFont(*g_DialogFont); title = _("from ") + EDA_Appl->m_CurrentOptionFile; SetTitle(title); LibModified = FALSE; /* 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 = 190; 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 = 190; pos.y += 35; wxStaticText * Msg = new wxStaticText(this, -1, _("Lib Modules:"), pos ); pos.y += 15; ListLibr = new wxListBox(this, -1, pos, wxSize(X_SIZE - pos.x -10,190), 0,NULL, wxLB_ALWAYS_SB|wxLB_SINGLE); Msg->SetForegroundColour(wxColour(200,0,0) ); if ( g_LibName_List ) { LibNameItem * libnamestruct = g_LibName_List->FirstLib; for ( ; libnamestruct != NULL; libnamestruct = libnamestruct->Pnext ) { ListLibr->Append(libnamestruct->m_Name); } } wxString text; #define DELTA_VPOS 17 size.x = 120; size.y = 90; pos.y = 100; pos.x = 10; new wxStaticBox(this, -1,_("Files ext:"), pos, size); pos.x += 5; pos.y += DELTA_VPOS; text = _("Board ext: ") + PcbExtBuffer; new wxStaticText(this, -1,text , pos); pos.x += 5; pos.y += DELTA_VPOS; text = _("Cmp ext: ") + NetCmpExtBuffer; new wxStaticText(this, -1,text , pos); pos.y += DELTA_VPOS; text = _("Lib ext: ") + LibExtBuffer; new wxStaticText(this, -1,text , pos); pos.y += DELTA_VPOS; text = _("Net ext: ") + NetExtBuffer; new wxStaticText(this, -1,text , pos); pos.x = 10; pos.y = 260; size.x = X_SIZE - pos.x - 10; size.y = -1; m_TextLibDir = new WinEDA_EnterText(this, _("Lib Modules Dir:"), g_UserLibDirBuffer, pos, size); pos.y += m_TextLibDir->GetDimension().y + 25; wxString DocModuleFileName = EDA_Appl->m_EDA_CommonConfig->Read("module_doc_file", "pcbnew/footprints.pdf"); m_TextHelpModulesFileName = new WinEDA_EnterText(this, _("Module Doc File:"), DocModuleFileName, pos, size); size.x = X_SIZE; size.y = pos.y + m_TextHelpModulesFileName->GetDimension().y + 10; SetClientSize(size); } /*****************************************************************/ /* Fonctions de base de WinEDA_ConfigFrame: la fenetre de config */ /*****************************************************************/ void WinEDA_ConfigFrame::OnCloseWindow(wxCloseEvent & event) { SetNewOptions(); EndModal(0); } /********************************************/ void WinEDA_ConfigFrame::SetNewOptions(void) /********************************************/ { g_UserLibDirBuffer = m_TextLibDir->GetData(); EDA_Appl->m_EDA_CommonConfig->Write("module_doc_file", m_TextHelpModulesFileName->GetData()); SetRealLibraryPath("modules"); } /******************************************************/ void WinEDA_ConfigFrame::SaveCfg(wxCommandEvent& event) /******************************************************/ { SetNewOptions(); m_Parent->Update_config(this); } /********************************************************/ void WinEDA_ConfigFrame::LibDelFct(wxCommandEvent& event) /********************************************************/ { int ii; wxString LibNameSelected; ii = ListLibr->GetSelection(); if ( ii < 0 ) return; LibNameSelected = ListLibr->GetStringSelection(); g_LibName_List->RemoveLibName(LibNameSelected); ListLibr->Delete(ii); LibModified = TRUE; } /*************************************************************/ void WinEDA_ConfigFrame::LibInsertFct(wxCommandEvent& event) /*************************************************************/ /* Insere ou ajoute une librairie a la liste existante: La nouvelle librairie est mise avant (insert) ou apres (ajout) la librairie sélectionnée */ { int ii; wxString fullfilename, ShortLibName; wxString mask ="*"; ii = ListLibr->GetSelection(); if ( ii < 0 ) ii = 0; if( event.GetId() == ADD_LIB) { if( g_LibName_List->FirstLib != NULL ) ii ++; /* Ajout apres selection */ } SetNewOptions(); mask += LibExtBuffer; g_RealLibDirBuffer.Replace("\\","/"); fullfilename = EDA_FileSelector( _("library files:"), g_RealLibDirBuffer, /* Chemin par defaut */ "", /* nom fichier par defaut */ LibExtBuffer, /* extension par defaut */ mask, /* Masque d'affichage */ this, 0, TRUE ); if ( fullfilename == "" ) return; ShortLibName = MakeReducedFileName(fullfilename, g_RealLibDirBuffer, LibExtBuffer); //Addition ou insertion de la librarire LibModified = TRUE; wxString SList[1]; SList[0] =wxString(ShortLibName); if ( g_LibName_List->InsertLibName(SList[0], ii) ) ListLibr->InsertItems(1,SList,ii); else DisplayError(this, _("Library exists! No Change")); }