More comprehensive dialog in netlist plugin interface. Some cleanup

This commit is contained in:
CHARRAS 2007-11-10 14:35:04 +00:00
parent 89a872b86e
commit cbb714f934
9 changed files with 1084 additions and 1898 deletions

View File

@ -4,6 +4,13 @@ Started 2007-June-11
Please add newer entries at the top, list the date and your name with
email address.
2007-Nov-10 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
================================================================================
+eeschema:
More comprehensive dialog in netlist plugin interface.
Eeschema configuration now shows the plugin netlist list
2007-Nov-09 UPDATE Geoff Harland <gharlandau@yahoo.com.au>
================================================================================
+ 3d-viewer

View File

@ -71,9 +71,9 @@ BEGIN_EVENT_TABLE( KiConfigEeschemaFrame, wxDialog )
EVT_BUTTON( SAVE_CFG, KiConfigEeschemaFrame::OnSaveCfgClick )
EVT_RADIOBOX( FORMAT_NETLIST, KiConfigEeschemaFrame::OnFormatNetlistSelected )
EVT_LISTBOX( FORMAT_NETLIST, KiConfigEeschemaFrame::OnFormatNetlistSelected )
EVT_BUTTON( DEL_LIB, KiConfigEeschemaFrame::OnDelLibClick )
EVT_BUTTON( REMOVE_LIB, KiConfigEeschemaFrame::OnRemoveLibClick )
EVT_BUTTON( ADD_LIB, KiConfigEeschemaFrame::OnAddLibClick )
@ -123,7 +123,7 @@ bool KiConfigEeschemaFrame::Create( wxWindow* parent, wxWindowID id, const wxStr
////@end KiConfigEeschemaFrame member initialisation
////@begin KiConfigEeschemaFrame creation
SetExtraStyle(GetExtraStyle()|wxWS_EX_BLOCK_EVENTS);
SetExtraStyle(wxWS_EX_BLOCK_EVENTS);
wxDialog::Create( parent, id, caption, pos, size, style );
CreateControls();
@ -145,7 +145,7 @@ void KiConfigEeschemaFrame::CreateControls()
SetFont(*g_DialogFont);
////@begin KiConfigEeschemaFrame content construction
// Generated by DialogBlocks, 28/02/2007 15:16:31 (unregistered)
// Generated by DialogBlocks, 10/11/2007 15:23:03 (unregistered)
KiConfigEeschemaFrame* itemDialog1 = this;
@ -153,76 +153,80 @@ void KiConfigEeschemaFrame::CreateControls()
itemDialog1->SetSizer(itemBoxSizer2);
wxBoxSizer* itemBoxSizer3 = new wxBoxSizer(wxHORIZONTAL);
itemBoxSizer2->Add(itemBoxSizer3, 0, wxGROW|wxALL, 5);
itemBoxSizer2->Add(itemBoxSizer3, 1, wxGROW|wxALL, 5);
wxBoxSizer* itemBoxSizer4 = new wxBoxSizer(wxVERTICAL);
itemBoxSizer3->Add(itemBoxSizer4, 0, wxGROW|wxALL, 5);
wxButton* itemButton5 = new wxButton( itemDialog1, SAVE_CFG, _("Save Cfg"), wxDefaultPosition, wxDefaultSize, 0 );
if (KiConfigEeschemaFrame::ShowToolTips())
itemButton5->SetToolTip(_("save current configuration setting in the local .pro file"));
itemButton5->SetForegroundColour(wxColour(204, 0, 0));
itemBoxSizer4->Add(itemButton5, 0, wxGROW|wxALL, 5);
itemBoxSizer4->Add(5, 5, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5);
itemBoxSizer4->Add(5, 5, 0, wxGROW|wxALL, 5);
wxString m_NetFormatBoxStrings[] = {
_("PcbNew"),
_("&OrcadPcb2"),
_("&CadStar"),
_("&Spice"),
_("Other")
};
m_NetFormatBox = new wxRadioBox( itemDialog1, FORMAT_NETLIST, _("NetList Formats:"), wxDefaultPosition, wxDefaultSize, 5, m_NetFormatBoxStrings, 1, wxRA_SPECIFY_COLS );
m_NetFormatBox->SetSelection(0);
itemBoxSizer4->Add(m_NetFormatBox, 0, wxGROW|wxALL, 5);
wxStaticText* itemStaticText7 = new wxStaticText( itemDialog1, wxID_STATIC, _("NetList Formats:"), wxDefaultPosition, wxDefaultSize, 0 );
itemBoxSizer4->Add(itemStaticText7, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP, 5);
itemBoxSizer4->Add(5, 5, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5);
wxArrayString m_NetFormatBoxStrings;
m_NetFormatBox = new wxListBox( itemDialog1, FORMAT_NETLIST, wxDefaultPosition, wxDefaultSize, m_NetFormatBoxStrings, wxLB_SINGLE );
itemBoxSizer4->Add(m_NetFormatBox, 0, wxGROW|wxLEFT|wxRIGHT|wxBOTTOM, 5);
wxStaticBox* itemStaticBoxSizer9Static = new wxStaticBox(itemDialog1, wxID_ANY, _("Files ext:"));
m_FileExtList = new wxStaticBoxSizer(itemStaticBoxSizer9Static, wxVERTICAL);
itemBoxSizer4->Add(5, 5, 0, wxGROW|wxALL, 5);
wxStaticBox* itemStaticBoxSizer10Static = new wxStaticBox(itemDialog1, wxID_ANY, _("Files ext:"));
m_FileExtList = new wxStaticBoxSizer(itemStaticBoxSizer10Static, wxVERTICAL);
itemBoxSizer4->Add(m_FileExtList, 0, wxGROW|wxALL, 5);
wxBoxSizer* itemBoxSizer10 = new wxBoxSizer(wxVERTICAL);
itemBoxSizer3->Add(itemBoxSizer10, 0, wxGROW|wxLEFT|wxRIGHT|wxBOTTOM, 5);
wxBoxSizer* itemBoxSizer11 = new wxBoxSizer(wxHORIZONTAL);
itemBoxSizer10->Add(itemBoxSizer11, 0, wxALIGN_CENTER_HORIZONTAL|wxLEFT|wxRIGHT|wxBOTTOM, 5);
wxBoxSizer* itemBoxSizer11 = new wxBoxSizer(wxVERTICAL);
itemBoxSizer3->Add(itemBoxSizer11, 1, wxGROW|wxLEFT|wxRIGHT|wxBOTTOM, 5);
wxBoxSizer* itemBoxSizer12 = new wxBoxSizer(wxVERTICAL);
itemBoxSizer11->Add(itemBoxSizer12, 0, wxALIGN_CENTER_VERTICAL, 5);
itemBoxSizer11->Add(itemBoxSizer12, 1, wxGROW, 5);
wxBoxSizer* itemBoxSizer13 = new wxBoxSizer(wxHORIZONTAL);
itemBoxSizer12->Add(itemBoxSizer13, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5);
itemBoxSizer12->Add(itemBoxSizer13, 0, wxGROW|wxALL, 5);
wxButton* itemButton14 = new wxButton( itemDialog1, DEL_LIB, _("Del"), wxDefaultPosition, wxDefaultSize, 0 );
wxButton* itemButton14 = new wxButton( itemDialog1, REMOVE_LIB, _("Remove"), wxDefaultPosition, wxDefaultSize, 0 );
if (KiConfigEeschemaFrame::ShowToolTips())
itemButton14->SetToolTip(_("Unload the selected library"));
itemButton14->SetForegroundColour(wxColour(204, 0, 0));
itemBoxSizer13->Add(itemButton14, 0, wxGROW|wxALL, 5);
itemBoxSizer13->Add(itemButton14, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
wxButton* itemButton15 = new wxButton( itemDialog1, ADD_LIB, _("Add"), wxDefaultPosition, wxDefaultSize, 0 );
if (KiConfigEeschemaFrame::ShowToolTips())
itemButton15->SetToolTip(_("Add a new library after the selected library, add load it"));
itemButton15->SetForegroundColour(wxColour(0, 128, 0));
itemBoxSizer13->Add(itemButton15, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
wxButton* itemButton16 = new wxButton( itemDialog1, INSERT_LIB, _("Ins"), wxDefaultPosition, wxDefaultSize, 0 );
itemButton16->SetHelpText(_("Add a new library beforer the selected library, add load it"));
if (KiConfigEeschemaFrame::ShowToolTips())
itemButton16->SetToolTip(_("Add a new library beforer the selected library, add load it"));
itemButton16->SetForegroundColour(wxColour(0, 0, 255));
itemBoxSizer13->Add(itemButton16, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
wxBoxSizer* itemBoxSizer17 = new wxBoxSizer(wxVERTICAL);
itemBoxSizer12->Add(itemBoxSizer17, 0, wxGROW|wxALL, 5);
itemBoxSizer12->Add(itemBoxSizer17, 1, wxGROW|wxALL, 5);
wxStaticText* itemStaticText18 = new wxStaticText( itemDialog1, wxID_STATIC, _("Libraries"), wxDefaultPosition, wxDefaultSize, 0 );
itemStaticText18->SetForegroundColour(wxColour(204, 0, 0));
itemBoxSizer17->Add(itemStaticText18, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxADJUST_MINSIZE, 5);
wxString* m_ListLibrStrings = NULL;
m_ListLibr = new wxListBox( itemDialog1, ID_LIST_LIBS, wxDefaultPosition, wxSize(-1, 300), 0, m_ListLibrStrings, wxLB_SINGLE );
itemBoxSizer17->Add(m_ListLibr, 0, wxGROW|wxLEFT|wxRIGHT|wxBOTTOM, 5);
wxArrayString m_ListLibrStrings;
m_ListLibr = new wxListBox( itemDialog1, ID_LISTBOX, wxDefaultPosition, wxDefaultSize, m_ListLibrStrings, wxLB_SINGLE );
itemBoxSizer17->Add(m_ListLibr, 1, wxGROW|wxLEFT|wxRIGHT|wxBOTTOM|wxADJUST_MINSIZE, 5);
wxStaticBox* itemStaticBoxSizer20Static = new wxStaticBox(itemDialog1, wxID_ANY, _("Library files path:"));
wxStaticBox* itemStaticBoxSizer20Static = new wxStaticBox(itemDialog1, wxID_ANY, _("Default library file path:"));
wxStaticBoxSizer* itemStaticBoxSizer20 = new wxStaticBoxSizer(itemStaticBoxSizer20Static, wxHORIZONTAL);
itemStaticBoxSizer20Static->SetForegroundColour(wxColour(206, 0, 0));
itemBoxSizer2->Add(itemStaticBoxSizer20, 0, wxGROW|wxALL, 5);
m_LibDirCtrl = new wxTextCtrl( itemDialog1, ID_TEXTCTRL, _T(""), wxDefaultPosition, wxSize(350, -1), 0 );
itemStaticBoxSizer20->Add(m_LibDirCtrl, 0, wxGROW|wxLEFT|wxRIGHT|wxBOTTOM, 5);
m_LibDirCtrl = new wxTextCtrl( itemDialog1, ID_TEXTCTRL, _T(""), wxDefaultPosition, wxDefaultSize, 0 );
if (KiConfigEeschemaFrame::ShowToolTips())
m_LibDirCtrl->SetToolTip(_("Default path to search libraries which have no absolute path in name,\nor a name which does not start by ./ or ../\nIf void, the default path is kicad/library\n"));
itemStaticBoxSizer20->Add(m_LibDirCtrl, 1, wxGROW|wxLEFT|wxRIGHT|wxBOTTOM, 5);
wxButton* itemButton22 = new wxButton( itemDialog1, ID_LIB_PATH_SEL, _("Browse"), wxDefaultPosition, wxDefaultSize, 0 );
itemStaticBoxSizer20->Add(itemButton22, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
@ -248,6 +252,19 @@ wxString msg = _("Cmp file Ext: ") + g_NetCmpExtBuffer;
msg = _("Schematic file Ext: ") + g_SchExtBuffer;
text = new wxStaticText( itemDialog1, -1, msg, wxDefaultPosition, wxDefaultSize, 0 );
m_FileExtList->Add(text, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxADJUST_MINSIZE, 5);
wxArrayString NetlistNameItems;
NetlistNameItems.Add(wxT("Pcbnew"));
NetlistNameItems.Add(wxT("OrcadPcb2"));
NetlistNameItems.Add(wxT("CadStar"));
NetlistNameItems.Add(wxT("Spice"));
msg = ReturnUserNetlistTypeName( true );
while ( ! msg.IsEmpty() )
{
NetlistNameItems.Add(msg);
msg = ReturnUserNetlistTypeName( false );
}
m_NetFormatBox->InsertItems(NetlistNameItems, 0);
}
/*!
@ -382,52 +399,25 @@ void KiConfigEeschemaFrame::SetFormatsNetListes()
/* Adjust the m_NetFormatBox current selection, according to the current netlist format*/
{
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;
}
if ( g_NetFormat > (int)m_NetFormatBox->GetCount() )
g_NetFormat = NET_TYPE_PCBNEW;
m_NetFormatBox->SetSelection(g_NetFormat - NET_TYPE_PCBNEW);
}
/*!
* wxEVT_COMMAND_RADIOBOX_SELECTED event handler for FORMAT_NETLIST
* wxEVT_COMMAND_NETLIST_SELECTED event handler for FORMAT_NETLIST
*/
void KiConfigEeschemaFrame::OnFormatNetlistSelected( 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;
g_NetFormat = m_NetFormatBox->GetSelection() + NET_TYPE_PCBNEW;
}
/*!
* wxEVT_COMMAND_BUTTON_CLICKED event handler for DEL_LIB
*/
void KiConfigEeschemaFrame::OnDelLibClick( wxCommandEvent& event )
void KiConfigEeschemaFrame::OnRemoveLibClick( wxCommandEvent& event )
{
LibDelFct(event);
}

View File

@ -40,10 +40,10 @@
#define ID_DIALOG 10000
#define SAVE_CFG 10001
#define FORMAT_NETLIST 10006
#define DEL_LIB 10002
#define ADD_LIB 10003
#define INSERT_LIB 10004
#define ID_LIST_LIBS 10005
#define REMOVE_LIB 10009
#define ADD_LIB 10010
#define INSERT_LIB 10011
#define ID_LISTBOX 10012
#define ID_TEXTCTRL 10007
#define ID_LIB_PATH_SEL 10008
#define SYMBOL_KICONFIGEESCHEMAFRAME_STYLE wxCAPTION|wxSYSTEM_MENU|wxCLOSE_BOX|MAYBE_RESIZE_BORDER
@ -89,11 +89,11 @@ public:
/// wxEVT_COMMAND_BUTTON_CLICKED event handler for SAVE_CFG
void OnSaveCfgClick( wxCommandEvent& event );
/// wxEVT_COMMAND_RADIOBOX_SELECTED event handler for FORMAT_NETLIST
/// wxEVT_COMMAND_LISTBOX_SELECTED event handler for FORMAT_NETLIST
void OnFormatNetlistSelected( wxCommandEvent& event );
/// wxEVT_COMMAND_BUTTON_CLICKED event handler for DEL_LIB
void OnDelLibClick( wxCommandEvent& event );
/// wxEVT_COMMAND_BUTTON_CLICKED event handler for REMOVE_LIB
void OnRemoveLibClick( wxCommandEvent& event );
/// wxEVT_COMMAND_BUTTON_CLICKED event handler for ADD_LIB
void OnAddLibClick( wxCommandEvent& event );
@ -124,7 +124,7 @@ public:
void ChangeSetup();
////@begin KiConfigEeschemaFrame member variables
wxRadioBox* m_NetFormatBox;
wxListBox* m_NetFormatBox;
wxStaticBoxSizer* m_FileExtList;
wxListBox* m_ListLibr;
wxTextCtrl* m_LibDirCtrl;

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1 +0,0 @@
#include "wx/msw/wx.rc"

View File

@ -82,21 +82,10 @@ void WriteNetList( WinEDA_SchematicFrame* frame, const wxString& FileNameNL,
fclose( f );
break;
case NET_TYPE_CUSTOM1:
case NET_TYPE_CUSTOM2:
case NET_TYPE_CUSTOM3:
case NET_TYPE_CUSTOM4:
case NET_TYPE_CUSTOM5:
case NET_TYPE_CUSTOM6:
case NET_TYPE_CUSTOM7:
case NET_TYPE_CUSTOM8:
Write_GENERIC_NetList( frame, FileNameNL );
default:
Write_GENERIC_NetList( frame, FileNameNL );
break;
default:
DisplayError( frame, wxT( "WriteNetList() err: Unknown Netlist Format" ) );
break;
}
}
}

View File

@ -14,23 +14,15 @@
#define ISBUS 1
/* Indicateurs de type de netliste generee */
/* Id to select netlist type */
typedef enum {
NET_TYPE_NOT_INIT = 0,
NET_TYPE_UNINIT = 0,
NET_TYPE_PCBNEW,
NET_TYPE_ORCADPCB2,
NET_TYPE_CADSTAR,
NET_TYPE_SPICE,
NET_TYPE_CUSTOM1,
NET_TYPE_CUSTOM2,
NET_TYPE_CUSTOM3,
NET_TYPE_CUSTOM4,
NET_TYPE_CUSTOM5,
NET_TYPE_CUSTOM6,
NET_TYPE_CUSTOM7,
NET_TYPE_CUSTOM8,
NET_TYPE_MAX
} TypeNetForm;
NET_TYPE_CUSTOM1 // NET_TYPE_CUSTOM1 is the first id for user netlist format
} TypeNetForm;
/* Max pin number per component and footprint */
@ -119,5 +111,15 @@ eda_global ObjetNetListStruct* g_TabObjNet;
void WriteNetList( WinEDA_SchematicFrame* frame, const wxString& FileNameNL, bool use_netnames );
void FreeTabNetList( ObjetNetListStruct* TabNetItems, int NbrNetItems );
/** Function ReturnUserNetlistTypeName
* to retrieve user netlist type names
* @param first = true: return first name of the list, false = return next
* @return a wxString : name of the type netlist or empty string
* this function must be called first with "first_item" = true
* and after with "first_item" = false to get all the other existing netlist names
*/
#define CUSTOMPANEL_COUNTMAX 8 // Max number of netlist plugins
wxString ReturnUserNetlistTypeName( bool first_item );
#endif

View File

@ -2,217 +2,323 @@
/* Dialog box for netlist outputs */
/**********************************/
/* Functions relatives to the dialog creating the netlist for pcbnew.
* The dialo is a notebook with 4 fixed netlist format:
* PCBNEW ORCADPCB2 CADSTAR and SPICE
* and up to CUSTOMPANEL_COUNTMAX (see netlist.h) user programmable format
* calling an external converter with convert an intermediate format to the
* user specific format.
* these external converters are refered there as plugins,
* but there are not really plugins, there are only external binaries
*/
#include "fctsys.h"
// #include "gr_basic.h"
#include "common.h"
#include "program.h"
#include "libcmp.h"
#include "general.h"
#include "netlist.h" /* Definitions generales liees au calcul de netliste */
#include "netlist.h"
#include "protos.h"
// ID for configuration:
#define CUSTOM_NETLIST_TITLE wxT("CustomNetlistTitle")
#define CUSTOM_NETLIST_COMMAND wxT("CustomNetlistCommand")
#define CUSTOM_NETLIST_TITLE wxT( "CustomNetlistTitle" )
#define CUSTOM_NETLIST_COMMAND wxT( "CustomNetlistCommand" )
/* Routines locales */
/* Variable locales */
/* Loacl variable */
/* Event id for notebook page buttons: */
enum id_netlist {
ID_CREATE_NETLIST = 1550,
ID_CURRENT_FORMAT_IS_DEFAULT,
ID_RUN_SIMULATOR,
ID_SETUP_PLUGIN,
ID_VALIDATE_PLUGIN,
ID_DELETE_PLUGIN,
ID_NETLIST_NOTEBOOK
};
/* panel (notebook page) identifiers */
enum panel_netlist_index {
PANELPCBNEW = 0, // Create Netlist format Pcbnew
PANELORCADPCB2, // Create Netlis format OracdPcb2
PANELCADSTAR, // Create Netlis format OracdPcb2
PANELSPICE, // Create Netlis format Pspice
PANELCUSTOMBASE // Start auxiliary panels (custom netlists)
PANELPCBNEW = 0, /* Handle Netlist format Pcbnew */
PANELORCADPCB2, /* Handle Netlist format OracdPcb2 */
PANELCADSTAR, /* Handle Netlist format CadStar */
PANELSPICE, /* Handle Netlist format Pspice */
PANELCUSTOMBASE /* First auxiliary panel (custom netlists).
* others use PANELCUSTOMBASE+1, PANELCUSTOMBASE+2.. */
};
/* Values returned when the netlist dialog is demiss */
enum gen_netlist_diag {
NET_OK,
NET_ABORT,
NET_PLUGIN_CHANGE
};
/****************************************************/
wxString ReturnUserNetlistTypeName( bool first_item )
/****************************************************/
/** Function ReturnUserNetlistTypeName
* to retrieve user netlist type names
* @param first = true: return first name of the list, false = return next
* @return a wxString : name of the type netlist or empty string
* this function must be called first with "first_item" = true
* and after with "first_item" = false to get all the other existing netlist names
*/
{
static int index;
wxString name, msg;
if( first_item )
index = 0;
else
index++;
msg = CUSTOM_NETLIST_TITLE;
msg << index + 1;
if( g_EDA_Appl->m_EDA_Config )
name = g_EDA_Appl->m_EDA_Config->Read( msg );
return name;
}
/************************/
/* Class declarations : */
/************************/
/* wxPanels for creating the NoteBook pages for each netlist format:
*/
class EDA_NoteBookPage: public wxPanel
class EDA_NoteBookPage : public wxPanel
{
public:
int m_IdNetType;
wxCheckBox * m_IsCurrentFormat;
WinEDA_EnterText * m_CommandStringCtrl;
WinEDA_EnterText * m_TitleStringCtrl;
wxButton * m_ButtonCancel;
wxBoxSizer * m_LeftBoxSizer;
wxBoxSizer * m_RightBoxSizer;
wxBoxSizer * m_LowBoxSizer;
int m_IdNetType;
wxCheckBox* m_IsCurrentFormat;
WinEDA_EnterText* m_CommandStringCtrl;
WinEDA_EnterText* m_TitleStringCtrl;
wxButton* m_ButtonCancel;
wxBoxSizer* m_LeftBoxSizer;
wxBoxSizer* m_RightBoxSizer;
wxBoxSizer* m_RightOptionsBoxSizer;
wxBoxSizer* m_LowBoxSizer;
EDA_NoteBookPage(wxNotebook* parent, const wxString & title,
int id_NetType, int idCheckBox, int idCreateFile);
~EDA_NoteBookPage() {};
EDA_NoteBookPage( wxNotebook* parent, const wxString& title,
int id_NetType, int idCheckBox, int idCreateFile );
~EDA_NoteBookPage() { };
};
/*****************************************************************************/
EDA_NoteBookPage::EDA_NoteBookPage(wxNotebook* parent, const wxString & title,
int id_NetType, int idCheckBox, int idCreateFile) :
wxPanel(parent, -1 )
/*****************************************************************************/
/* Contructor to create a setup page for one netlist format.
* Used in Netlist format Dialog box creation
*/
{
SetFont(*g_DialogFont);
m_IdNetType = id_NetType;
m_CommandStringCtrl = NULL;
m_TitleStringCtrl = NULL;
m_IsCurrentFormat = NULL;
m_ButtonCancel = NULL;
parent->AddPage(this, title, g_NetFormat == m_IdNetType);
wxBoxSizer * MainBoxSizer = new wxBoxSizer(wxVERTICAL);
SetSizer(MainBoxSizer);
wxBoxSizer * UpperBoxSizer = new wxBoxSizer(wxHORIZONTAL);
m_LowBoxSizer = new wxBoxSizer(wxVERTICAL);
MainBoxSizer->Add(UpperBoxSizer, 0, wxGROW|wxALL, 5);
MainBoxSizer->Add(m_LowBoxSizer, 0, wxGROW|wxALL, 5);
m_LeftBoxSizer = new wxBoxSizer(wxVERTICAL);
m_RightBoxSizer = new wxBoxSizer(wxVERTICAL);
UpperBoxSizer->Add(m_LeftBoxSizer, 0, wxGROW|wxALL, 5);
UpperBoxSizer->Add(m_RightBoxSizer, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
if( idCheckBox )
{
wxStaticText * text = new wxStaticText(this, -1, _("Options:"));
m_LeftBoxSizer->Add(text, 0, wxGROW|wxALL, 5);
m_IsCurrentFormat = new wxCheckBox(this, idCheckBox, _("Default format"));
m_LeftBoxSizer->Add(m_IsCurrentFormat, 0, wxGROW|wxALL, 5);
if( g_NetFormat == m_IdNetType )
m_IsCurrentFormat->SetValue(TRUE);
}
if( idCreateFile ) // Create the 2 standard buttons: Create File and Cancel
{
wxButton * Button;
if( idCreateFile == ID_SETUP_PLUGIN )
Button = new wxButton(this, idCreateFile, _("&Browse Plugin"));
else
Button = new wxButton(this, idCreateFile, _("&Netlist"));
Button->SetForegroundColour(*wxRED);
m_RightBoxSizer->Add(Button, 0, wxGROW|wxALL, 5);
m_ButtonCancel =
Button = new wxButton(this, wxID_CANCEL, _("&Cancel"));
Button->SetForegroundColour(*wxBLUE);
m_RightBoxSizer->Add(Button, 0, wxGROW|wxALL, 5);
}
}
#define CUSTOMPANEL_COUNTMAX 8
/* Dialog frame for creating netlists */
class WinEDA_NetlistFrame: public wxDialog
class WinEDA_NetlistFrame : public wxDialog
{
public:
WinEDA_SchematicFrame * m_Parent;
wxNotebook* m_NoteBook;
EDA_NoteBookPage * m_PanelNetType[4 + CUSTOMPANEL_COUNTMAX];
WinEDA_SchematicFrame* m_Parent;
wxNotebook* m_NoteBook;
EDA_NoteBookPage* m_PanelNetType[4 + CUSTOMPANEL_COUNTMAX];
wxRadioBox * m_UseNetNamesInNetlist;
wxRadioBox* m_UseNetNamesInNetlist;
public:
// Constructor and destructor
WinEDA_NetlistFrame(WinEDA_SchematicFrame *parent, wxPoint& pos);
~WinEDA_NetlistFrame() {};
WinEDA_NetlistFrame( WinEDA_SchematicFrame* parent, wxPoint& pos );
~WinEDA_NetlistFrame() { };
private:
void InstallCustomPages();
void InstallPageSpice();
void GenNetlist(wxCommandEvent& event);
void RunSimulator(wxCommandEvent& event);
void NetlistUpdateOpt();
void OnCancelClick(wxCommandEvent& event);
void SelectNetlistType(wxCommandEvent& event);
void SetupPlugin(wxCommandEvent& event);
DECLARE_EVENT_TABLE()};
void InstallCustomPages();
void InstallPageSpice();
void GenNetlist( wxCommandEvent& event );
void RunSimulator( wxCommandEvent& event );
void NetlistUpdateOpt();
void OnCancelClick( wxCommandEvent& event );
void SelectNetlistType( wxCommandEvent& event );
void SetupPluginData( wxCommandEvent& event );
void DeletePluginPanel( wxCommandEvent& event );
void ValidatePluginPanel( wxCommandEvent& event );
BEGIN_EVENT_TABLE(WinEDA_NetlistFrame, wxDialog)
EVT_BUTTON(wxID_CANCEL, WinEDA_NetlistFrame::OnCancelClick)
EVT_BUTTON(ID_CREATE_NETLIST, WinEDA_NetlistFrame::GenNetlist)
EVT_BUTTON(ID_SETUP_PLUGIN, WinEDA_NetlistFrame::SetupPlugin)
EVT_CHECKBOX(ID_CURRENT_FORMAT_IS_DEFAULT, WinEDA_NetlistFrame::SelectNetlistType)
EVT_BUTTON(ID_RUN_SIMULATOR, WinEDA_NetlistFrame::RunSimulator)
void WriteCurrentNetlistSetup( void );
DECLARE_EVENT_TABLE()
};
BEGIN_EVENT_TABLE( WinEDA_NetlistFrame, wxDialog )
EVT_BUTTON( wxID_CANCEL, WinEDA_NetlistFrame::OnCancelClick )
EVT_BUTTON( ID_CREATE_NETLIST, WinEDA_NetlistFrame::GenNetlist )
EVT_BUTTON( ID_SETUP_PLUGIN, WinEDA_NetlistFrame::SetupPluginData )
EVT_BUTTON( ID_DELETE_PLUGIN, WinEDA_NetlistFrame::DeletePluginPanel )
EVT_BUTTON( ID_VALIDATE_PLUGIN, WinEDA_NetlistFrame::ValidatePluginPanel )
EVT_CHECKBOX( ID_CURRENT_FORMAT_IS_DEFAULT, WinEDA_NetlistFrame::SelectNetlistType )
EVT_BUTTON( ID_RUN_SIMULATOR, WinEDA_NetlistFrame::RunSimulator )
END_EVENT_TABLE()
/****************************************************************/
void InstallNetlistFrame(WinEDA_SchematicFrame *parent, wxPoint & pos)
/****************************************************************/
/*********************************************************************/
void InstallNetlistFrame( WinEDA_SchematicFrame* parent, wxPoint& pos )
/*********************************************************************/
/* Installator for the netlist generation dialog box
*/
{
WinEDA_NetlistFrame * frame = new WinEDA_NetlistFrame(parent, pos);
frame->ShowModal();
frame->Destroy();
int ii;
if ( g_NetFormat < NET_TYPE_PCBNEW )
g_NetFormat = NET_TYPE_PCBNEW;
do
{
WinEDA_NetlistFrame* frame = new WinEDA_NetlistFrame( parent, pos );
ii = frame->ShowModal();
frame->Destroy();
} while( ii == NET_PLUGIN_CHANGE );
// If a plugin is removed or added, rebuild and reopen the new dialog
}
#define H_SIZE 370
#define V_SIZE 300
/*******************************/
/* Functions for these classes */
/*******************************/
/*****************************************************************************/
EDA_NoteBookPage::EDA_NoteBookPage( wxNotebook* parent, const wxString& title,
int id_NetType, int idCheckBox, int idCreateFile ) :
wxPanel( parent, -1, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL | wxBORDER_SUNKEN )
/*****************************************************************************/
/** Contructor to create a setup page for one netlist format.
* Used in Netlist format Dialog box creation
* @param parent = wxNotebook * parent
* @param title = title (name) of the notebook page
* @param id_NetType = netlist type id
* @param idCheckBox = event ID attached to the "format is default" check box
* @param idCreateFile = event ID attached to the "create netlist" button
*/
{
SetFont( *g_DialogFont );
m_IdNetType = id_NetType;
m_CommandStringCtrl = NULL;
m_TitleStringCtrl = NULL;
m_IsCurrentFormat = NULL;
m_ButtonCancel = NULL;
parent->AddPage( this, title, g_NetFormat == m_IdNetType );
wxBoxSizer* MainBoxSizer = new wxBoxSizer( wxVERTICAL );
SetSizer( MainBoxSizer );
wxBoxSizer* UpperBoxSizer = new wxBoxSizer( wxHORIZONTAL );
m_LowBoxSizer = new wxBoxSizer( wxVERTICAL );
MainBoxSizer->Add( UpperBoxSizer, 0, wxGROW | wxALL, 5 );
MainBoxSizer->Add( m_LowBoxSizer, 0, wxGROW | wxALL, 5 );
m_LeftBoxSizer = new wxBoxSizer( wxVERTICAL );
m_RightBoxSizer = new wxBoxSizer( wxVERTICAL );
m_RightOptionsBoxSizer = new wxBoxSizer( wxVERTICAL );
UpperBoxSizer->Add( m_LeftBoxSizer, 0, wxGROW | wxALL, 5 );
UpperBoxSizer->Add( m_RightBoxSizer, 0, wxALIGN_CENTER_VERTICAL | wxALL, 5 );
UpperBoxSizer->Add( m_RightOptionsBoxSizer, 0, wxALIGN_CENTER_VERTICAL | wxALL, 5 );
if( idCheckBox )
{
wxStaticText* text = new wxStaticText( this, -1, _( "Options:" ) );
m_LeftBoxSizer->Add( text, 0, wxGROW | wxALL, 5 );
m_IsCurrentFormat = new wxCheckBox( this, idCheckBox, _( "Default format" ) );
m_LeftBoxSizer->Add( m_IsCurrentFormat, 0, wxGROW | wxALL, 5 );
if( g_NetFormat == m_IdNetType )
m_IsCurrentFormat->SetValue( TRUE );
}
/* Create the buttons: Create Neltist or browse Plugin and Cancel
* and a third button for plugins : Remove or Ok button */
if( idCreateFile )
{
wxButton* Button;
if( idCreateFile == ID_SETUP_PLUGIN ) /* This is the "add plugin" panel */
Button = new wxButton( this, idCreateFile, _( "&Browse Plugin" ) );
else
Button = new wxButton( this, idCreateFile, _( "&Netlist" ) );
Button->SetForegroundColour( *wxRED );
m_RightBoxSizer->Add( Button, 0, wxGROW | wxALL, 5 );
m_ButtonCancel =
Button = new wxButton( this, wxID_CANCEL, _( "&Cancel" ) );
Button->SetForegroundColour( *wxBLUE );
m_RightBoxSizer->Add( Button, 0, wxGROW | wxALL, 5 );
/* Add special buttons to plugin panels:
* for panel plugins: added the "delete" button
* for the last panel (add plugin) a Ok button is added
*/
if( idCreateFile == ID_SETUP_PLUGIN ) /* This is the "add plugin" panel: add Ok button */
{
Button = new wxButton( this, ID_VALIDATE_PLUGIN, _( "&Ok" ) );
m_RightOptionsBoxSizer->Add( Button, 0, wxGROW | wxALL, 5 );
}
else if( id_NetType >= PANELCUSTOMBASE ) /* This is a plugin panel: add delete button */
{
Button = new wxButton( this, ID_DELETE_PLUGIN, _( "&Delete" ) );
m_RightOptionsBoxSizer->Add( Button, 0, wxGROW | wxALL, 5 );
}
}
}
/*************************************************************************************/
WinEDA_NetlistFrame::WinEDA_NetlistFrame(WinEDA_SchematicFrame *parent, wxPoint& framepos):
wxDialog(parent, -1, _("Netlist"), framepos, wxSize(H_SIZE, V_SIZE), DIALOG_STYLE | MAYBE_RESIZE_BORDER)
WinEDA_NetlistFrame::WinEDA_NetlistFrame( WinEDA_SchematicFrame* parent, wxPoint& framepos ) :
wxDialog( parent, -1, _( "Netlist" ), framepos,
wxDefaultSize, DIALOG_STYLE | MAYBE_RESIZE_BORDER )
/*************************************************************************************/
/* Constructor for the netlist generation dialog box
*/
{
int ii;
int ii;
m_Parent = parent;
SetFont(*g_DialogFont);
if( g_NetFormat == NET_TYPE_NOT_INIT )
g_NetFormat = NET_TYPE_PCBNEW;
SetFont( *g_DialogFont );
for( ii = 0; ii < PANELCUSTOMBASE + CUSTOMPANEL_COUNTMAX; ii ++ )
for( ii = 0; ii < PANELCUSTOMBASE + CUSTOMPANEL_COUNTMAX; ii++ )
{
m_PanelNetType[ii] = NULL;
}
if( (framepos.x == -1) && (framepos.y == -1) )
if( framepos == wxDefaultPosition )
Centre();
wxBoxSizer * GeneralBoxSizer = new wxBoxSizer(wxVERTICAL);
SetSizer(GeneralBoxSizer);
wxBoxSizer* GeneralBoxSizer = new wxBoxSizer( wxVERTICAL );
SetSizer( GeneralBoxSizer );
m_NoteBook = new wxNotebook( this, ID_NETLIST_NOTEBOOK,
wxDefaultPosition, wxSize(H_SIZE - 6, V_SIZE - 28) );
m_NoteBook->SetFont(*g_DialogFont);
GeneralBoxSizer->Add(m_NoteBook, 0, wxGROW|wxALL, 5);
wxDefaultPosition, wxDefaultSize );
m_NoteBook->SetFont( *g_DialogFont );
GeneralBoxSizer->Add( m_NoteBook, 0, wxGROW | wxALL, 5 );
// Add panels
// Add notebook pages:
// Add Panel FORMAT PCBNEW
m_PanelNetType[PANELPCBNEW] = new EDA_NoteBookPage(m_NoteBook, wxT("Pcbnew"), NET_TYPE_PCBNEW,
ID_CURRENT_FORMAT_IS_DEFAULT, ID_CREATE_NETLIST);
m_PanelNetType[PANELPCBNEW] = new EDA_NoteBookPage( m_NoteBook, wxT(
"Pcbnew" ), NET_TYPE_PCBNEW,
ID_CURRENT_FORMAT_IS_DEFAULT,
ID_CREATE_NETLIST );
// Add Panel FORMAT ORCADPCB2
m_PanelNetType[PANELORCADPCB2] = new EDA_NoteBookPage(m_NoteBook, wxT("OrcadPCB2"), NET_TYPE_ORCADPCB2,
ID_CURRENT_FORMAT_IS_DEFAULT, ID_CREATE_NETLIST);
m_PanelNetType[PANELORCADPCB2] = new EDA_NoteBookPage( m_NoteBook, wxT(
"OrcadPCB2" ), NET_TYPE_ORCADPCB2,
ID_CURRENT_FORMAT_IS_DEFAULT,
ID_CREATE_NETLIST );
// Add Panel FORMAT CADSTAR
m_PanelNetType[PANELCADSTAR] = new EDA_NoteBookPage(m_NoteBook, wxT("CadStar"), NET_TYPE_CADSTAR,
ID_CURRENT_FORMAT_IS_DEFAULT, ID_CREATE_NETLIST);
m_PanelNetType[PANELCADSTAR] = new EDA_NoteBookPage( m_NoteBook, wxT(
"CadStar" ), NET_TYPE_CADSTAR,
ID_CURRENT_FORMAT_IS_DEFAULT,
ID_CREATE_NETLIST );
// Add Panel spice
InstallPageSpice();
@ -220,158 +326,169 @@ int ii;
// Add custom panels:
InstallCustomPages();
// Problem in wxMSV >= 2.7.1 : we must call GetSizer for one notebook page
// to have a proper sizer commutation of all pages
m_PanelNetType[PANELPCBNEW]->GetSizer()->Fit(this);
m_PanelNetType[PANELPCBNEW]->GetSizer()->SetSizeHints(this);
GetSizer()->Fit(this);
GetSizer()->SetSizeHints(this);
GetSizer()->Fit( this );
GetSizer()->SetSizeHints( this );
}
/*************************************************/
void WinEDA_NetlistFrame::InstallPageSpice()
/*************************************************/
/* Create the spice page
*/
{
wxButton * Button;
EDA_NoteBookPage * page;
wxButton* Button;
EDA_NoteBookPage* page;
page = m_PanelNetType[PANELSPICE] = new EDA_NoteBookPage(m_NoteBook, wxT("Spice"), NET_TYPE_SPICE, 0, 0);
page = m_PanelNetType[PANELSPICE] = new EDA_NoteBookPage( m_NoteBook, wxT(
"Spice" ), NET_TYPE_SPICE, 0, 0 );
page->m_IsCurrentFormat = new wxCheckBox(page, ID_CURRENT_FORMAT_IS_DEFAULT, _("Default format"));
page->m_IsCurrentFormat = new wxCheckBox( page, ID_CURRENT_FORMAT_IS_DEFAULT,
_( "Default format" ) );
page->m_IsCurrentFormat->SetValue( g_NetFormat == NET_TYPE_SPICE );
page->m_LeftBoxSizer->Add(page->m_IsCurrentFormat, 0, wxGROW|wxALL, 5);
page->m_LeftBoxSizer->Add( page->m_IsCurrentFormat, 0, wxGROW | wxALL, 5 );
wxString netlist_opt[2] = { _("Use Net Names"), _("Use Net Numbers") };
m_UseNetNamesInNetlist = new wxRadioBox(page, -1, _("Netlist Options:"),
wxDefaultPosition, wxDefaultSize,
2, netlist_opt, 1, wxRA_SPECIFY_COLS);
if( ! g_OptNetListUseNames )
m_UseNetNamesInNetlist->SetSelection(1);
page->m_LeftBoxSizer->Add(m_UseNetNamesInNetlist, 0, wxGROW|wxALL, 5);
wxString netlist_opt[2] = { _( "Use Net Names" ), _( "Use Net Numbers" ) };
m_UseNetNamesInNetlist = new wxRadioBox( page, -1, _( "Netlist Options:" ),
wxDefaultPosition, wxDefaultSize,
2, netlist_opt, 1, wxRA_SPECIFY_COLS );
if( !g_OptNetListUseNames )
m_UseNetNamesInNetlist->SetSelection( 1 );
page->m_LeftBoxSizer->Add( m_UseNetNamesInNetlist, 0, wxGROW | wxALL, 5 );
page->m_CommandStringCtrl = new WinEDA_EnterText( page,
_("Simulator command:"), g_SimulatorCommandLine,
page->m_LowBoxSizer, wxSize(H_SIZE - 10, -1) );
_(
"Simulator command:" ),
g_SimulatorCommandLine,
page->m_LowBoxSizer, wxDefaultSize );
// Add buttons
Button = new wxButton( page, ID_CREATE_NETLIST, _("Netlist") );
Button->SetForegroundColour(*wxRED);
page->m_RightBoxSizer->Add(Button, 0, wxGROW|wxALL, 5);
Button = new wxButton( page, ID_CREATE_NETLIST, _( "Netlist" ) );
Button->SetForegroundColour( *wxRED );
page->m_RightBoxSizer->Add( Button, 0, wxGROW | wxALL, 5 );
Button = new wxButton(page, ID_RUN_SIMULATOR, _("&Run Simulator"));
Button->SetForegroundColour( wxColour(0, 100, 0) );
page->m_RightBoxSizer->Add(Button, 0, wxGROW|wxALL, 5);
Button = new wxButton( page, ID_RUN_SIMULATOR, _( "&Run Simulator" ) );
Button->SetForegroundColour( wxColour( 0, 100, 0 ) );
page->m_RightBoxSizer->Add( Button, 0, wxGROW | wxALL, 5 );
Button = new wxButton(page, wxID_CANCEL, _("&Cancel"));
Button->SetForegroundColour(*wxBLUE);
page->m_RightBoxSizer->Add(Button, 0, wxGROW|wxALL, 5);
Button = new wxButton( page, wxID_CANCEL, _( "&Cancel" ) );
Button->SetForegroundColour( *wxBLUE );
page->m_RightBoxSizer->Add( Button, 0, wxGROW | wxALL, 5 );
}
/*************************************************/
void WinEDA_NetlistFrame::InstallCustomPages()
/*************************************************/
/* create the pages for custom netlist format selection:
*/
{
int ii, CustomCount;
wxString title, previoustitle, msg;
EDA_NoteBookPage * CurrPage;
int ii, CustomCount;
wxString title, previoustitle, msg;
EDA_NoteBookPage* CurrPage;
CustomCount = CUSTOMPANEL_COUNTMAX;
previoustitle = wxT("dummy_title");
CustomCount = CUSTOMPANEL_COUNTMAX;
previoustitle = wxT( "dummy_title" );
for( ii = 0; ii < CustomCount; ii++ )
{
msg = CUSTOM_NETLIST_TITLE;
msg << ii + 1;
title = m_Parent->m_Parent->m_EDA_Config->Read(msg);
title = ReturnUserNetlistTypeName( ii == 0 ? true : false );
// Install the panel only if it is the first panel not initialised
if( title.IsEmpty() && previoustitle.IsEmpty() )
break;
break; // No more panel to install
/* Install the panel "Add Plugin" after
* the last initialised panel */
previoustitle = title;
if( title.IsEmpty() )
CurrPage = m_PanelNetType[PANELCUSTOMBASE + ii] =
new EDA_NoteBookPage(m_NoteBook, _("Add Plugin"),
NET_TYPE_CUSTOM1 + ii,
ID_CURRENT_FORMAT_IS_DEFAULT, ID_SETUP_PLUGIN);
else
CurrPage = m_PanelNetType[PANELCUSTOMBASE + ii] =
new EDA_NoteBookPage(m_NoteBook, title,
NET_TYPE_CUSTOM1 + ii,
ID_CURRENT_FORMAT_IS_DEFAULT, ID_CREATE_NETLIST);
CurrPage =
m_PanelNetType[PANELCUSTOMBASE + ii] =
new EDA_NoteBookPage( m_NoteBook, _( "Add Plugin" ),
NET_TYPE_CUSTOM1 + ii,
ID_CURRENT_FORMAT_IS_DEFAULT, ID_SETUP_PLUGIN );
else /* Install a plugin panel */
CurrPage =
m_PanelNetType[PANELCUSTOMBASE + ii] =
new EDA_NoteBookPage( m_NoteBook, title,
NET_TYPE_CUSTOM1 + ii,
ID_CURRENT_FORMAT_IS_DEFAULT, ID_CREATE_NETLIST );
msg = CUSTOM_NETLIST_COMMAND;
msg << ii + 1;
wxString Command = m_Parent->m_Parent->m_EDA_Config->Read(msg);
CurrPage->m_CommandStringCtrl = new WinEDA_EnterText( CurrPage,
_("Netlist command:"), Command,
CurrPage->m_LowBoxSizer, wxSize(H_SIZE - 10, -1) );
wxString Command = m_Parent->m_Parent->m_EDA_Config->Read( msg );
CurrPage->m_CommandStringCtrl =
new WinEDA_EnterText( CurrPage,
_( "Netlist command:" ), Command,
CurrPage->m_LowBoxSizer,
wxDefaultSize );
CurrPage->m_TitleStringCtrl = new WinEDA_EnterText( CurrPage,
_("Title:"), title,
CurrPage->m_LowBoxSizer, wxSize(H_SIZE - 10, -1) );
CurrPage->m_TitleStringCtrl =
new WinEDA_EnterText( CurrPage,
_( "Title:" ), title,
CurrPage->m_LowBoxSizer,
wxDefaultSize );
}
}
/***********************************************************/
void WinEDA_NetlistFrame::SetupPlugin(wxCommandEvent& event)
void WinEDA_NetlistFrame::SetupPluginData( wxCommandEvent& event )
/***********************************************************/
/* Browse the plugin files and set the m_CommandStringCtrl field
*/
{
wxString FullFileName, Mask, Path;
Mask = wxT("*");
Path = g_EDA_Appl->m_BinDir;
FullFileName = EDA_FileSelector( _("Plugin files:"),
Path, /* Chemin par defaut */
FullFileName, /* nom fichier par defaut */
wxEmptyString, /* extension par defaut */
Mask, /* Masque d'affichage */
this,
wxFD_OPEN,
TRUE
);
wxString FullFileName, Mask, Path;
Mask = wxT( "*" );
Path = g_EDA_Appl->m_BinDir;
FullFileName = EDA_FileSelector( _( "Plugin files:" ),
Path, /* Chemin par defaut */
FullFileName, /* nom fichier par defaut */
wxEmptyString, /* extension par defaut */
Mask, /* Masque d'affichage */
this,
wxFD_OPEN,
TRUE
);
if( FullFileName.IsEmpty() )
return;
EDA_NoteBookPage * CurrPage;
CurrPage = (EDA_NoteBookPage *) m_NoteBook->GetCurrentPage();
EDA_NoteBookPage* CurrPage;
CurrPage = (EDA_NoteBookPage*) m_NoteBook->GetCurrentPage();
if( CurrPage == NULL )
return;
CurrPage->m_CommandStringCtrl->SetValue(FullFileName);
CurrPage->m_CommandStringCtrl->SetValue( FullFileName );
/* Get a title for this page */
wxString title = CurrPage->m_TitleStringCtrl->GetValue();
if( title.IsEmpty() )
DisplayInfo(this, _("Now, you must choose a title for this netlist control page\nand close the dialog box"));
DisplayInfo( this,
_(
"Do not forget to choose a title for this netlist control page\nand close the dialog box" ) );
}
// Fonctions de positionnement des variables d'option
/*****************************************************************/
void WinEDA_NetlistFrame::SelectNetlistType(wxCommandEvent& event)
void WinEDA_NetlistFrame::SelectNetlistType( wxCommandEvent& event )
/*****************************************************************/
{
int ii;
EDA_NoteBookPage * CurrPage;
int ii;
EDA_NoteBookPage* CurrPage;
for( ii = 0; ii < PANELCUSTOMBASE + CUSTOMPANEL_COUNTMAX; ii++ )
if( m_PanelNetType[ii] )
m_PanelNetType[ii]->m_IsCurrentFormat->SetValue(FALSE);
m_PanelNetType[ii]->m_IsCurrentFormat->SetValue( FALSE );
CurrPage = (EDA_NoteBookPage *) m_NoteBook->GetCurrentPage();
CurrPage = (EDA_NoteBookPage*) m_NoteBook->GetCurrentPage();
if( CurrPage == NULL )
return;
g_NetFormat = CurrPage->m_IdNetType;
CurrPage->m_IsCurrentFormat->SetValue(TRUE);
CurrPage->m_IsCurrentFormat->SetValue( TRUE );
}
@ -379,7 +496,7 @@ EDA_NoteBookPage * CurrPage;
void WinEDA_NetlistFrame::NetlistUpdateOpt()
/***********************************************/
{
int ii;
int ii;
g_SimulatorCommandLine =
m_PanelNetType[PANELSPICE]->m_CommandStringCtrl->GetValue();
@ -400,31 +517,37 @@ int ii;
/**********************************************************/
void WinEDA_NetlistFrame::GenNetlist(wxCommandEvent& event)
void WinEDA_NetlistFrame::GenNetlist( wxCommandEvent& event )
/**********************************************************/
/** Function GenNetlist
* Create the netlist file:
* calcualte the filename with the suitable extentions
* and run the netlist creator
*/
{
wxString FullFileName, FileExt, Mask;
wxString msg, Command;
int netformat_tmp = g_NetFormat;
wxString FullFileName, FileExt, Mask;
wxString msg, Command;
int netformat_tmp = g_NetFormat;
NetlistUpdateOpt();
EDA_NoteBookPage * CurrPage;
EDA_NoteBookPage* CurrPage;
CurrPage = (EDA_NoteBookPage *) m_NoteBook->GetCurrentPage();
CurrPage = (EDA_NoteBookPage*) m_NoteBook->GetCurrentPage();
g_NetFormat = CurrPage->m_IdNetType;
/* Calcul du nom du fichier netlist */
/* Calculate the netlist filename */
FullFileName = ScreenSch->m_FileName;
switch( g_NetFormat )
{
case NET_TYPE_SPICE:
FileExt = wxT(".cir");
FileExt = wxT( ".cir" );
break;
case NET_TYPE_CADSTAR:
FileExt = wxT(".frp");
FileExt = wxT( ".frp" );
break;
default:
@ -432,36 +555,37 @@ EDA_NoteBookPage * CurrPage;
break;
}
Mask = wxT("*") + FileExt + wxT("*");
ChangeFileNameExt(FullFileName, FileExt);
Mask = wxT( "*" ) + FileExt + wxT( "*" );
ChangeFileNameExt( FullFileName, FileExt );
FullFileName = EDA_FileSelector( _("Netlist files:"),
wxEmptyString, /* Chemin par defaut */
FullFileName, /* nom fichier par defaut */
FileExt, /* extension par defaut */
Mask, /* Masque d'affichage */
this,
wxFD_SAVE,
TRUE
);
FullFileName = EDA_FileSelector( _( "Netlist files:" ),
wxEmptyString, /* Defaut path */
FullFileName, /* Defaut filename */
FileExt, /* Defaut extension */
Mask, /* Mask for filename selection */
this,
wxFD_SAVE,
TRUE
);
if( FullFileName.IsEmpty() )
return;
m_Parent->MsgPanel->EraseMsgBox();
ReAnnotatePowerSymbolsOnly();
if( CheckAnnotate(m_Parent, 0) )
if( CheckAnnotate( m_Parent, 0 ) )
{
if( !IsOK( this, _("Must be Annotated, Continue ?") ) )
if( !IsOK( this, _( "Must be Annotated, Continue ?" ) ) )
return;
}
/* Cleanup the entire hierarchy */
EDA_ScreenList ScreenList(NULL);
for( SCH_SCREEN * screen = ScreenList.GetFirst(); screen != NULL; screen = ScreenList.GetNext() )
EDA_ScreenList ScreenList( NULL );
for( SCH_SCREEN* screen = ScreenList.GetFirst(); screen != NULL; screen = ScreenList.GetNext() )
{
bool ModifyWires;
ModifyWires = screen->SchematicCleanUp(NULL);
ModifyWires = screen->SchematicCleanUp( NULL );
// if wire list has changed, delete the Undo Redo list to avoid
// pointer problems with deleted data
if( ModifyWires )
@ -477,31 +601,81 @@ EDA_NoteBookPage * CurrPage;
switch( g_NetFormat )
{
default:
WriteNetList(m_Parent, FullFileName, TRUE);
WriteNetList( m_Parent, FullFileName, TRUE );
break;
case NET_TYPE_CADSTAR:
case NET_TYPE_ORCADPCB2:
WriteNetList(m_Parent, FullFileName, FALSE);
WriteNetList( m_Parent, FullFileName, FALSE );
case NET_TYPE_SPICE:
g_OptNetListUseNames = TRUE; // Used for pspice, gnucap
if( m_UseNetNamesInNetlist->GetSelection() == 1 )
g_OptNetListUseNames = FALSE;
WriteNetList(m_Parent, FullFileName, g_OptNetListUseNames);
WriteNetList( m_Parent, FullFileName, g_OptNetListUseNames );
break;
}
FreeTabNetList( g_TabObjNet, g_NbrObjNet );
g_NetFormat = netformat_tmp;
WriteCurrentNetlistSetup();
EndModal( NET_OK );
}
/***********************************************************/
void WinEDA_NetlistFrame::OnCancelClick( wxCommandEvent& event )
/***********************************************************/
{
EndModal( NET_ABORT );
}
/***********************************************************/
void WinEDA_NetlistFrame::RunSimulator( wxCommandEvent& event )
/***********************************************************/
{
wxString NetlistFullFileName, ExecFile, CommandLine;
g_SimulatorCommandLine =
m_PanelNetType[PANELSPICE]->m_CommandStringCtrl->GetValue();
g_SimulatorCommandLine.Trim( FALSE );
g_SimulatorCommandLine.Trim( TRUE );
ExecFile = g_SimulatorCommandLine.BeforeFirst( ' ' );
CommandLine = g_SimulatorCommandLine.AfterFirst( ' ' );
/* Calculate the netlist filename */
NetlistFullFileName = ScreenSch->m_FileName;
ChangeFileNameExt( NetlistFullFileName, wxT( ".cir" ) );
AddDelimiterString( NetlistFullFileName );
CommandLine += wxT( " " ) + NetlistFullFileName;
ExecuteFile( this, ExecFile, CommandLine );
}
/*********************************************************/
void WinEDA_NetlistFrame::WriteCurrentNetlistSetup( void )
/*********************************************************/
/** Function WriteCurrentNetlistSetup
* Write the current netlist options setup in the configuration
*/
{
wxString msg, Command;
NetlistUpdateOpt();
// Update the new titles
for( int ii = 0; ii < CUSTOMPANEL_COUNTMAX; ii++ )
{
EDA_NoteBookPage * CurrPage = m_PanelNetType[ii + PANELCUSTOMBASE];
EDA_NoteBookPage* CurrPage = m_PanelNetType[ii + PANELCUSTOMBASE];
if( CurrPage == NULL )
break;
msg = wxT("Custom");
msg = wxT( "Custom" );
msg << ii + 1;
if( CurrPage->m_TitleStringCtrl )
{
@ -510,7 +684,7 @@ EDA_NoteBookPage * CurrPage;
{
msg = CUSTOM_NETLIST_TITLE;
msg << ii + 1;
m_Parent->m_Parent->m_EDA_Config->Write(msg, title);
m_Parent->m_Parent->m_EDA_Config->Write( msg, title );
}
}
@ -519,40 +693,55 @@ EDA_NoteBookPage * CurrPage;
Command = CurrPage->m_CommandStringCtrl->GetValue();
msg = CUSTOM_NETLIST_COMMAND;
msg << ii + 1;
m_Parent->m_Parent->m_EDA_Config->Write(msg, Command);
m_Parent->m_Parent->m_EDA_Config->Write( msg, Command );
}
}
EndModal( 0 );
}
/***********************************************************/
void WinEDA_NetlistFrame::OnCancelClick(wxCommandEvent& event)
/***********************************************************/
/******************************************************************/
void WinEDA_NetlistFrame::DeletePluginPanel( wxCommandEvent& event )
/******************************************************************/
/** Function DeletePluginPanel
* Remove a panel relative to a netlist plugin
*/
{
EndModal( -1 );
EDA_NoteBookPage* CurrPage = (EDA_NoteBookPage*) m_NoteBook->GetCurrentPage();
CurrPage->m_CommandStringCtrl->SetValue( wxEmptyString );
CurrPage->m_TitleStringCtrl->SetValue( wxEmptyString );
if( CurrPage->m_IsCurrentFormat->IsChecked() )
{
CurrPage->m_IsCurrentFormat->SetValue( FALSE );
m_PanelNetType[PANELPCBNEW]->m_IsCurrentFormat->SetValue( TRUE );
}
WriteCurrentNetlistSetup();
EndModal( NET_PLUGIN_CHANGE );
}
/***********************************************************/
void WinEDA_NetlistFrame::RunSimulator(wxCommandEvent& event)
/***********************************************************/
/******************************************************************/
void WinEDA_NetlistFrame::ValidatePluginPanel( wxCommandEvent& event )
/******************************************************************/
/** Function ValidatePluginPanel
* Validate the panel info relative to a new netlist plugin
*/
{
wxString NetlistFullFileName, ExecFile, CommandLine;
EDA_NoteBookPage* CurrPage = (EDA_NoteBookPage*) m_NoteBook->GetCurrentPage();
g_SimulatorCommandLine =
m_PanelNetType[PANELSPICE]->m_CommandStringCtrl->GetValue();
g_SimulatorCommandLine.Trim(FALSE);
g_SimulatorCommandLine.Trim(TRUE);
ExecFile = g_SimulatorCommandLine.BeforeFirst(' ');
if( CurrPage->m_CommandStringCtrl->GetValue() == wxEmptyString )
{
DisplayError( this, _( "Error. You must provide a command String" ) );
return;
}
if( CurrPage->m_TitleStringCtrl->GetValue() == wxEmptyString )
{
DisplayError( this, _( "Error. You must provide a Title" ) );
return;
}
CommandLine = g_SimulatorCommandLine.AfterFirst(' ');
/* Calcul du nom du fichier netlist */
NetlistFullFileName = ScreenSch->m_FileName;
ChangeFileNameExt(NetlistFullFileName, wxT(".cir"));
AddDelimiterString(NetlistFullFileName);
CommandLine += wxT(" ") + NetlistFullFileName;
ExecuteFile(this, ExecFile, CommandLine);
WriteCurrentNetlistSetup();
EndModal( NET_PLUGIN_CHANGE );
}