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 Please add newer entries at the top, list the date and your name with
email address. 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> 2007-Nov-09 UPDATE Geoff Harland <gharlandau@yahoo.com.au>
================================================================================ ================================================================================
+ 3d-viewer + 3d-viewer

View File

@ -71,9 +71,9 @@ BEGIN_EVENT_TABLE( KiConfigEeschemaFrame, wxDialog )
EVT_BUTTON( SAVE_CFG, KiConfigEeschemaFrame::OnSaveCfgClick ) 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 ) EVT_BUTTON( ADD_LIB, KiConfigEeschemaFrame::OnAddLibClick )
@ -123,7 +123,7 @@ bool KiConfigEeschemaFrame::Create( wxWindow* parent, wxWindowID id, const wxStr
////@end KiConfigEeschemaFrame member initialisation ////@end KiConfigEeschemaFrame member initialisation
////@begin KiConfigEeschemaFrame creation ////@begin KiConfigEeschemaFrame creation
SetExtraStyle(GetExtraStyle()|wxWS_EX_BLOCK_EVENTS); SetExtraStyle(wxWS_EX_BLOCK_EVENTS);
wxDialog::Create( parent, id, caption, pos, size, style ); wxDialog::Create( parent, id, caption, pos, size, style );
CreateControls(); CreateControls();
@ -145,7 +145,7 @@ void KiConfigEeschemaFrame::CreateControls()
SetFont(*g_DialogFont); SetFont(*g_DialogFont);
////@begin KiConfigEeschemaFrame content construction ////@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; KiConfigEeschemaFrame* itemDialog1 = this;
@ -153,76 +153,80 @@ void KiConfigEeschemaFrame::CreateControls()
itemDialog1->SetSizer(itemBoxSizer2); itemDialog1->SetSizer(itemBoxSizer2);
wxBoxSizer* itemBoxSizer3 = new wxBoxSizer(wxHORIZONTAL); wxBoxSizer* itemBoxSizer3 = new wxBoxSizer(wxHORIZONTAL);
itemBoxSizer2->Add(itemBoxSizer3, 0, wxGROW|wxALL, 5); itemBoxSizer2->Add(itemBoxSizer3, 1, wxGROW|wxALL, 5);
wxBoxSizer* itemBoxSizer4 = new wxBoxSizer(wxVERTICAL); wxBoxSizer* itemBoxSizer4 = new wxBoxSizer(wxVERTICAL);
itemBoxSizer3->Add(itemBoxSizer4, 0, wxGROW|wxALL, 5); itemBoxSizer3->Add(itemBoxSizer4, 0, wxGROW|wxALL, 5);
wxButton* itemButton5 = new wxButton( itemDialog1, SAVE_CFG, _("Save Cfg"), wxDefaultPosition, wxDefaultSize, 0 ); 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)); itemButton5->SetForegroundColour(wxColour(204, 0, 0));
itemBoxSizer4->Add(itemButton5, 0, wxGROW|wxALL, 5); 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[] = { wxStaticText* itemStaticText7 = new wxStaticText( itemDialog1, wxID_STATIC, _("NetList Formats:"), wxDefaultPosition, wxDefaultSize, 0 );
_("PcbNew"), itemBoxSizer4->Add(itemStaticText7, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP, 5);
_("&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);
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:")); itemBoxSizer4->Add(5, 5, 0, wxGROW|wxALL, 5);
m_FileExtList = new wxStaticBoxSizer(itemStaticBoxSizer9Static, wxVERTICAL);
wxStaticBox* itemStaticBoxSizer10Static = new wxStaticBox(itemDialog1, wxID_ANY, _("Files ext:"));
m_FileExtList = new wxStaticBoxSizer(itemStaticBoxSizer10Static, wxVERTICAL);
itemBoxSizer4->Add(m_FileExtList, 0, wxGROW|wxALL, 5); itemBoxSizer4->Add(m_FileExtList, 0, wxGROW|wxALL, 5);
wxBoxSizer* itemBoxSizer10 = new wxBoxSizer(wxVERTICAL); wxBoxSizer* itemBoxSizer11 = new wxBoxSizer(wxVERTICAL);
itemBoxSizer3->Add(itemBoxSizer10, 0, wxGROW|wxLEFT|wxRIGHT|wxBOTTOM, 5); itemBoxSizer3->Add(itemBoxSizer11, 1, wxGROW|wxLEFT|wxRIGHT|wxBOTTOM, 5);
wxBoxSizer* itemBoxSizer11 = new wxBoxSizer(wxHORIZONTAL);
itemBoxSizer10->Add(itemBoxSizer11, 0, wxALIGN_CENTER_HORIZONTAL|wxLEFT|wxRIGHT|wxBOTTOM, 5);
wxBoxSizer* itemBoxSizer12 = new wxBoxSizer(wxVERTICAL); wxBoxSizer* itemBoxSizer12 = new wxBoxSizer(wxVERTICAL);
itemBoxSizer11->Add(itemBoxSizer12, 0, wxALIGN_CENTER_VERTICAL, 5); itemBoxSizer11->Add(itemBoxSizer12, 1, wxGROW, 5);
wxBoxSizer* itemBoxSizer13 = new wxBoxSizer(wxHORIZONTAL); 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)); 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 ); 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)); itemButton15->SetForegroundColour(wxColour(0, 128, 0));
itemBoxSizer13->Add(itemButton15, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5); itemBoxSizer13->Add(itemButton15, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
wxButton* itemButton16 = new wxButton( itemDialog1, INSERT_LIB, _("Ins"), wxDefaultPosition, wxDefaultSize, 0 ); 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)); itemButton16->SetForegroundColour(wxColour(0, 0, 255));
itemBoxSizer13->Add(itemButton16, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5); itemBoxSizer13->Add(itemButton16, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
wxBoxSizer* itemBoxSizer17 = new wxBoxSizer(wxVERTICAL); 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 ); wxStaticText* itemStaticText18 = new wxStaticText( itemDialog1, wxID_STATIC, _("Libraries"), wxDefaultPosition, wxDefaultSize, 0 );
itemStaticText18->SetForegroundColour(wxColour(204, 0, 0)); itemStaticText18->SetForegroundColour(wxColour(204, 0, 0));
itemBoxSizer17->Add(itemStaticText18, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxADJUST_MINSIZE, 5); itemBoxSizer17->Add(itemStaticText18, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxADJUST_MINSIZE, 5);
wxString* m_ListLibrStrings = NULL; wxArrayString m_ListLibrStrings;
m_ListLibr = new wxListBox( itemDialog1, ID_LIST_LIBS, wxDefaultPosition, wxSize(-1, 300), 0, m_ListLibrStrings, wxLB_SINGLE ); m_ListLibr = new wxListBox( itemDialog1, ID_LISTBOX, wxDefaultPosition, wxDefaultSize, m_ListLibrStrings, wxLB_SINGLE );
itemBoxSizer17->Add(m_ListLibr, 0, wxGROW|wxLEFT|wxRIGHT|wxBOTTOM, 5); 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); wxStaticBoxSizer* itemStaticBoxSizer20 = new wxStaticBoxSizer(itemStaticBoxSizer20Static, wxHORIZONTAL);
itemStaticBoxSizer20Static->SetForegroundColour(wxColour(206, 0, 0)); itemStaticBoxSizer20Static->SetForegroundColour(wxColour(206, 0, 0));
itemBoxSizer2->Add(itemStaticBoxSizer20, 0, wxGROW|wxALL, 5); itemBoxSizer2->Add(itemStaticBoxSizer20, 0, wxGROW|wxALL, 5);
m_LibDirCtrl = new wxTextCtrl( itemDialog1, ID_TEXTCTRL, _T(""), wxDefaultPosition, wxSize(350, -1), 0 ); m_LibDirCtrl = new wxTextCtrl( itemDialog1, ID_TEXTCTRL, _T(""), wxDefaultPosition, wxDefaultSize, 0 );
itemStaticBoxSizer20->Add(m_LibDirCtrl, 0, wxGROW|wxLEFT|wxRIGHT|wxBOTTOM, 5); 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 ); wxButton* itemButton22 = new wxButton( itemDialog1, ID_LIB_PATH_SEL, _("Browse"), wxDefaultPosition, wxDefaultSize, 0 );
itemStaticBoxSizer20->Add(itemButton22, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5); 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; msg = _("Schematic file Ext: ") + g_SchExtBuffer;
text = new wxStaticText( itemDialog1, -1, msg, wxDefaultPosition, wxDefaultSize, 0 ); text = new wxStaticText( itemDialog1, -1, msg, wxDefaultPosition, wxDefaultSize, 0 );
m_FileExtList->Add(text, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxADJUST_MINSIZE, 5); 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*/ /* Adjust the m_NetFormatBox current selection, according to the current netlist format*/
{ {
switch( g_NetFormat ) if ( g_NetFormat > (int)m_NetFormatBox->GetCount() )
{ g_NetFormat = NET_TYPE_PCBNEW;
case NET_TYPE_NOT_INIT: m_NetFormatBox->SetSelection(g_NetFormat - NET_TYPE_PCBNEW);
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;
}
} }
/*! /*!
* wxEVT_COMMAND_RADIOBOX_SELECTED event handler for FORMAT_NETLIST * wxEVT_COMMAND_NETLIST_SELECTED event handler for FORMAT_NETLIST
*/ */
void KiConfigEeschemaFrame::OnFormatNetlistSelected( wxCommandEvent& event ) void KiConfigEeschemaFrame::OnFormatNetlistSelected( wxCommandEvent& event )
{ {
int ii; g_NetFormat = m_NetFormatBox->GetSelection() + NET_TYPE_PCBNEW;
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;
} }
/*! /*!
* wxEVT_COMMAND_BUTTON_CLICKED event handler for DEL_LIB * wxEVT_COMMAND_BUTTON_CLICKED event handler for DEL_LIB
*/ */
void KiConfigEeschemaFrame::OnDelLibClick( wxCommandEvent& event ) void KiConfigEeschemaFrame::OnRemoveLibClick( wxCommandEvent& event )
{ {
LibDelFct(event); LibDelFct(event);
} }

View File

@ -40,10 +40,10 @@
#define ID_DIALOG 10000 #define ID_DIALOG 10000
#define SAVE_CFG 10001 #define SAVE_CFG 10001
#define FORMAT_NETLIST 10006 #define FORMAT_NETLIST 10006
#define DEL_LIB 10002 #define REMOVE_LIB 10009
#define ADD_LIB 10003 #define ADD_LIB 10010
#define INSERT_LIB 10004 #define INSERT_LIB 10011
#define ID_LIST_LIBS 10005 #define ID_LISTBOX 10012
#define ID_TEXTCTRL 10007 #define ID_TEXTCTRL 10007
#define ID_LIB_PATH_SEL 10008 #define ID_LIB_PATH_SEL 10008
#define SYMBOL_KICONFIGEESCHEMAFRAME_STYLE wxCAPTION|wxSYSTEM_MENU|wxCLOSE_BOX|MAYBE_RESIZE_BORDER #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 /// wxEVT_COMMAND_BUTTON_CLICKED event handler for SAVE_CFG
void OnSaveCfgClick( wxCommandEvent& event ); 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 ); void OnFormatNetlistSelected( wxCommandEvent& event );
/// wxEVT_COMMAND_BUTTON_CLICKED event handler for DEL_LIB /// wxEVT_COMMAND_BUTTON_CLICKED event handler for REMOVE_LIB
void OnDelLibClick( wxCommandEvent& event ); void OnRemoveLibClick( wxCommandEvent& event );
/// wxEVT_COMMAND_BUTTON_CLICKED event handler for ADD_LIB /// wxEVT_COMMAND_BUTTON_CLICKED event handler for ADD_LIB
void OnAddLibClick( wxCommandEvent& event ); void OnAddLibClick( wxCommandEvent& event );
@ -124,7 +124,7 @@ public:
void ChangeSetup(); void ChangeSetup();
////@begin KiConfigEeschemaFrame member variables ////@begin KiConfigEeschemaFrame member variables
wxRadioBox* m_NetFormatBox; wxListBox* m_NetFormatBox;
wxStaticBoxSizer* m_FileExtList; wxStaticBoxSizer* m_FileExtList;
wxListBox* m_ListLibr; wxListBox* m_ListLibr;
wxTextCtrl* m_LibDirCtrl; 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 ); fclose( f );
break; break;
case NET_TYPE_CUSTOM1: default:
case NET_TYPE_CUSTOM2: Write_GENERIC_NetList( frame, FileNameNL );
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 );
break; break;
}
default:
DisplayError( frame, wxT( "WriteNetList() err: Unknown Netlist Format" ) );
break;
}
} }

View File

@ -14,23 +14,15 @@
#define ISBUS 1 #define ISBUS 1
/* Indicateurs de type de netliste generee */ /* Id to select netlist type */
typedef enum { typedef enum {
NET_TYPE_NOT_INIT = 0, NET_TYPE_UNINIT = 0,
NET_TYPE_PCBNEW, NET_TYPE_PCBNEW,
NET_TYPE_ORCADPCB2, NET_TYPE_ORCADPCB2,
NET_TYPE_CADSTAR, NET_TYPE_CADSTAR,
NET_TYPE_SPICE, NET_TYPE_SPICE,
NET_TYPE_CUSTOM1, NET_TYPE_CUSTOM1 // NET_TYPE_CUSTOM1 is the first id for user netlist format
NET_TYPE_CUSTOM2, } TypeNetForm;
NET_TYPE_CUSTOM3,
NET_TYPE_CUSTOM4,
NET_TYPE_CUSTOM5,
NET_TYPE_CUSTOM6,
NET_TYPE_CUSTOM7,
NET_TYPE_CUSTOM8,
NET_TYPE_MAX
} TypeNetForm;
/* Max pin number per component and footprint */ /* 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 WriteNetList( WinEDA_SchematicFrame* frame, const wxString& FileNameNL, bool use_netnames );
void FreeTabNetList( ObjetNetListStruct* TabNetItems, int NbrNetItems ); 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 #endif

View File

@ -2,217 +2,323 @@
/* Dialog box for netlist outputs */ /* 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 "fctsys.h"
// #include "gr_basic.h"
#include "common.h" #include "common.h"
#include "program.h" #include "program.h"
#include "libcmp.h" #include "libcmp.h"
#include "general.h" #include "general.h"
#include "netlist.h" /* Definitions generales liees au calcul de netliste */ #include "netlist.h"
#include "protos.h" #include "protos.h"
// ID for configuration: // ID for configuration:
#define CUSTOM_NETLIST_TITLE wxT("CustomNetlistTitle") #define CUSTOM_NETLIST_TITLE wxT( "CustomNetlistTitle" )
#define CUSTOM_NETLIST_COMMAND wxT("CustomNetlistCommand") #define CUSTOM_NETLIST_COMMAND wxT( "CustomNetlistCommand" )
/* Routines locales */ /* Loacl variable */
/* Variable locales */
/* Event id for notebook page buttons: */
enum id_netlist { enum id_netlist {
ID_CREATE_NETLIST = 1550, ID_CREATE_NETLIST = 1550,
ID_CURRENT_FORMAT_IS_DEFAULT, ID_CURRENT_FORMAT_IS_DEFAULT,
ID_RUN_SIMULATOR, ID_RUN_SIMULATOR,
ID_SETUP_PLUGIN, ID_SETUP_PLUGIN,
ID_VALIDATE_PLUGIN,
ID_DELETE_PLUGIN,
ID_NETLIST_NOTEBOOK ID_NETLIST_NOTEBOOK
}; };
/* panel (notebook page) identifiers */
enum panel_netlist_index { enum panel_netlist_index {
PANELPCBNEW = 0, // Create Netlist format Pcbnew PANELPCBNEW = 0, /* Handle Netlist format Pcbnew */
PANELORCADPCB2, // Create Netlis format OracdPcb2 PANELORCADPCB2, /* Handle Netlist format OracdPcb2 */
PANELCADSTAR, // Create Netlis format OracdPcb2 PANELCADSTAR, /* Handle Netlist format CadStar */
PANELSPICE, // Create Netlis format Pspice PANELSPICE, /* Handle Netlist format Pspice */
PANELCUSTOMBASE // Start auxiliary panels (custom netlists) 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: /* wxPanels for creating the NoteBook pages for each netlist format:
*/ */
class EDA_NoteBookPage: public wxPanel class EDA_NoteBookPage : public wxPanel
{ {
public: public:
int m_IdNetType; int m_IdNetType;
wxCheckBox * m_IsCurrentFormat; wxCheckBox* m_IsCurrentFormat;
WinEDA_EnterText * m_CommandStringCtrl; WinEDA_EnterText* m_CommandStringCtrl;
WinEDA_EnterText * m_TitleStringCtrl; WinEDA_EnterText* m_TitleStringCtrl;
wxButton * m_ButtonCancel; wxButton* m_ButtonCancel;
wxBoxSizer * m_LeftBoxSizer; wxBoxSizer* m_LeftBoxSizer;
wxBoxSizer * m_RightBoxSizer; wxBoxSizer* m_RightBoxSizer;
wxBoxSizer * m_LowBoxSizer; wxBoxSizer* m_RightOptionsBoxSizer;
wxBoxSizer* m_LowBoxSizer;
EDA_NoteBookPage(wxNotebook* parent, const wxString & title, EDA_NoteBookPage( wxNotebook* parent, const wxString& title,
int id_NetType, int idCheckBox, int idCreateFile); int id_NetType, int idCheckBox, int idCreateFile );
~EDA_NoteBookPage() {}; ~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 */ /* Dialog frame for creating netlists */
class WinEDA_NetlistFrame: public wxDialog class WinEDA_NetlistFrame : public wxDialog
{ {
public: public:
WinEDA_SchematicFrame * m_Parent; WinEDA_SchematicFrame* m_Parent;
wxNotebook* m_NoteBook; wxNotebook* m_NoteBook;
EDA_NoteBookPage * m_PanelNetType[4 + CUSTOMPANEL_COUNTMAX]; EDA_NoteBookPage* m_PanelNetType[4 + CUSTOMPANEL_COUNTMAX];
wxRadioBox * m_UseNetNamesInNetlist; wxRadioBox* m_UseNetNamesInNetlist;
public: public:
// Constructor and destructor // Constructor and destructor
WinEDA_NetlistFrame(WinEDA_SchematicFrame *parent, wxPoint& pos); WinEDA_NetlistFrame( WinEDA_SchematicFrame* parent, wxPoint& pos );
~WinEDA_NetlistFrame() {}; ~WinEDA_NetlistFrame() { };
private: private:
void InstallCustomPages(); void InstallCustomPages();
void InstallPageSpice(); void InstallPageSpice();
void GenNetlist(wxCommandEvent& event); void GenNetlist( wxCommandEvent& event );
void RunSimulator(wxCommandEvent& event); void RunSimulator( wxCommandEvent& event );
void NetlistUpdateOpt(); void NetlistUpdateOpt();
void OnCancelClick(wxCommandEvent& event); void OnCancelClick( wxCommandEvent& event );
void SelectNetlistType(wxCommandEvent& event); void SelectNetlistType( wxCommandEvent& event );
void SetupPlugin(wxCommandEvent& event); void SetupPluginData( wxCommandEvent& event );
DECLARE_EVENT_TABLE()}; void DeletePluginPanel( wxCommandEvent& event );
void ValidatePluginPanel( wxCommandEvent& event );
BEGIN_EVENT_TABLE(WinEDA_NetlistFrame, wxDialog) void WriteCurrentNetlistSetup( void );
EVT_BUTTON(wxID_CANCEL, WinEDA_NetlistFrame::OnCancelClick)
EVT_BUTTON(ID_CREATE_NETLIST, WinEDA_NetlistFrame::GenNetlist) DECLARE_EVENT_TABLE()
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) 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() END_EVENT_TABLE()
/****************************************************************/ /*********************************************************************/
void InstallNetlistFrame(WinEDA_SchematicFrame *parent, wxPoint & pos) void InstallNetlistFrame( WinEDA_SchematicFrame* parent, wxPoint& pos )
/****************************************************************/ /*********************************************************************/
/* Installator for the netlist generation dialog box /* Installator for the netlist generation dialog box
*/ */
{ {
WinEDA_NetlistFrame * frame = new WinEDA_NetlistFrame(parent, pos); int ii;
frame->ShowModal();
frame->Destroy(); 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): WinEDA_NetlistFrame::WinEDA_NetlistFrame( WinEDA_SchematicFrame* parent, wxPoint& framepos ) :
wxDialog(parent, -1, _("Netlist"), framepos, wxSize(H_SIZE, V_SIZE), DIALOG_STYLE | MAYBE_RESIZE_BORDER) wxDialog( parent, -1, _( "Netlist" ), framepos,
wxDefaultSize, DIALOG_STYLE | MAYBE_RESIZE_BORDER )
/*************************************************************************************/ /*************************************************************************************/
/* Constructor for the netlist generation dialog box /* Constructor for the netlist generation dialog box
*/ */
{ {
int ii; int ii;
m_Parent = parent; m_Parent = parent;
SetFont(*g_DialogFont); SetFont( *g_DialogFont );
if( g_NetFormat == NET_TYPE_NOT_INIT )
g_NetFormat = NET_TYPE_PCBNEW;
for( ii = 0; ii < PANELCUSTOMBASE + CUSTOMPANEL_COUNTMAX; ii ++ ) for( ii = 0; ii < PANELCUSTOMBASE + CUSTOMPANEL_COUNTMAX; ii++ )
{ {
m_PanelNetType[ii] = NULL; m_PanelNetType[ii] = NULL;
} }
if( (framepos.x == -1) && (framepos.y == -1) ) if( framepos == wxDefaultPosition )
Centre(); Centre();
wxBoxSizer * GeneralBoxSizer = new wxBoxSizer(wxVERTICAL); wxBoxSizer* GeneralBoxSizer = new wxBoxSizer( wxVERTICAL );
SetSizer(GeneralBoxSizer); SetSizer( GeneralBoxSizer );
m_NoteBook = new wxNotebook( this, ID_NETLIST_NOTEBOOK, m_NoteBook = new wxNotebook( this, ID_NETLIST_NOTEBOOK,
wxDefaultPosition, wxSize(H_SIZE - 6, V_SIZE - 28) ); wxDefaultPosition, wxDefaultSize );
m_NoteBook->SetFont(*g_DialogFont); m_NoteBook->SetFont( *g_DialogFont );
GeneralBoxSizer->Add(m_NoteBook, 0, wxGROW|wxALL, 5); GeneralBoxSizer->Add( m_NoteBook, 0, wxGROW | wxALL, 5 );
// Add panels // Add notebook pages:
// Add Panel FORMAT PCBNEW // Add Panel FORMAT PCBNEW
m_PanelNetType[PANELPCBNEW] = new EDA_NoteBookPage(m_NoteBook, wxT("Pcbnew"), NET_TYPE_PCBNEW, m_PanelNetType[PANELPCBNEW] = new EDA_NoteBookPage( m_NoteBook, wxT(
ID_CURRENT_FORMAT_IS_DEFAULT, ID_CREATE_NETLIST); "Pcbnew" ), NET_TYPE_PCBNEW,
ID_CURRENT_FORMAT_IS_DEFAULT,
ID_CREATE_NETLIST );
// Add Panel FORMAT ORCADPCB2 // Add Panel FORMAT ORCADPCB2
m_PanelNetType[PANELORCADPCB2] = new EDA_NoteBookPage(m_NoteBook, wxT("OrcadPCB2"), NET_TYPE_ORCADPCB2, m_PanelNetType[PANELORCADPCB2] = new EDA_NoteBookPage( m_NoteBook, wxT(
ID_CURRENT_FORMAT_IS_DEFAULT, ID_CREATE_NETLIST); "OrcadPCB2" ), NET_TYPE_ORCADPCB2,
ID_CURRENT_FORMAT_IS_DEFAULT,
ID_CREATE_NETLIST );
// Add Panel FORMAT CADSTAR // Add Panel FORMAT CADSTAR
m_PanelNetType[PANELCADSTAR] = new EDA_NoteBookPage(m_NoteBook, wxT("CadStar"), NET_TYPE_CADSTAR, m_PanelNetType[PANELCADSTAR] = new EDA_NoteBookPage( m_NoteBook, wxT(
ID_CURRENT_FORMAT_IS_DEFAULT, ID_CREATE_NETLIST); "CadStar" ), NET_TYPE_CADSTAR,
ID_CURRENT_FORMAT_IS_DEFAULT,
ID_CREATE_NETLIST );
// Add Panel spice // Add Panel spice
InstallPageSpice(); InstallPageSpice();
@ -220,158 +326,169 @@ int ii;
// Add custom panels: // Add custom panels:
InstallCustomPages(); InstallCustomPages();
// Problem in wxMSV >= 2.7.1 : we must call GetSizer for one notebook page GetSizer()->Fit( this );
// to have a proper sizer commutation of all pages GetSizer()->SetSizeHints( this );
m_PanelNetType[PANELPCBNEW]->GetSizer()->Fit(this);
m_PanelNetType[PANELPCBNEW]->GetSizer()->SetSizeHints(this);
GetSizer()->Fit(this);
GetSizer()->SetSizeHints(this);
} }
/*************************************************/ /*************************************************/
void WinEDA_NetlistFrame::InstallPageSpice() void WinEDA_NetlistFrame::InstallPageSpice()
/*************************************************/ /*************************************************/
/* Create the spice page /* Create the spice page
*/ */
{ {
wxButton * Button; wxButton* Button;
EDA_NoteBookPage * page; 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_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") }; wxString netlist_opt[2] = { _( "Use Net Names" ), _( "Use Net Numbers" ) };
m_UseNetNamesInNetlist = new wxRadioBox(page, -1, _("Netlist Options:"), m_UseNetNamesInNetlist = new wxRadioBox( page, -1, _( "Netlist Options:" ),
wxDefaultPosition, wxDefaultSize, wxDefaultPosition, wxDefaultSize,
2, netlist_opt, 1, wxRA_SPECIFY_COLS); 2, netlist_opt, 1, wxRA_SPECIFY_COLS );
if( ! g_OptNetListUseNames ) if( !g_OptNetListUseNames )
m_UseNetNamesInNetlist->SetSelection(1); m_UseNetNamesInNetlist->SetSelection( 1 );
page->m_LeftBoxSizer->Add(m_UseNetNamesInNetlist, 0, wxGROW|wxALL, 5); page->m_LeftBoxSizer->Add( m_UseNetNamesInNetlist, 0, wxGROW | wxALL, 5 );
page->m_CommandStringCtrl = new WinEDA_EnterText( page, 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 // Add buttons
Button = new wxButton( page, ID_CREATE_NETLIST, _("Netlist") ); Button = new wxButton( page, ID_CREATE_NETLIST, _( "Netlist" ) );
Button->SetForegroundColour(*wxRED); Button->SetForegroundColour( *wxRED );
page->m_RightBoxSizer->Add(Button, 0, wxGROW|wxALL, 5); page->m_RightBoxSizer->Add( Button, 0, wxGROW | wxALL, 5 );
Button = new wxButton(page, ID_RUN_SIMULATOR, _("&Run Simulator")); Button = new wxButton( page, ID_RUN_SIMULATOR, _( "&Run Simulator" ) );
Button->SetForegroundColour( wxColour(0, 100, 0) ); Button->SetForegroundColour( wxColour( 0, 100, 0 ) );
page->m_RightBoxSizer->Add(Button, 0, wxGROW|wxALL, 5); page->m_RightBoxSizer->Add( Button, 0, wxGROW | wxALL, 5 );
Button = new wxButton(page, wxID_CANCEL, _("&Cancel")); Button = new wxButton( page, wxID_CANCEL, _( "&Cancel" ) );
Button->SetForegroundColour(*wxBLUE); Button->SetForegroundColour( *wxBLUE );
page->m_RightBoxSizer->Add(Button, 0, wxGROW|wxALL, 5); page->m_RightBoxSizer->Add( Button, 0, wxGROW | wxALL, 5 );
} }
/*************************************************/ /*************************************************/
void WinEDA_NetlistFrame::InstallCustomPages() void WinEDA_NetlistFrame::InstallCustomPages()
/*************************************************/ /*************************************************/
/* create the pages for custom netlist format selection: /* create the pages for custom netlist format selection:
*/ */
{ {
int ii, CustomCount; int ii, CustomCount;
wxString title, previoustitle, msg; wxString title, previoustitle, msg;
EDA_NoteBookPage * CurrPage; EDA_NoteBookPage* CurrPage;
CustomCount = CUSTOMPANEL_COUNTMAX; CustomCount = CUSTOMPANEL_COUNTMAX;
previoustitle = wxT("dummy_title"); previoustitle = wxT( "dummy_title" );
for( ii = 0; ii < CustomCount; ii++ ) for( ii = 0; ii < CustomCount; ii++ )
{ {
msg = CUSTOM_NETLIST_TITLE; title = ReturnUserNetlistTypeName( ii == 0 ? true : false );
msg << ii + 1;
title = m_Parent->m_Parent->m_EDA_Config->Read(msg);
// Install the panel only if it is the first panel not initialised
if( title.IsEmpty() && previoustitle.IsEmpty() ) if( title.IsEmpty() && previoustitle.IsEmpty() )
break; break; // No more panel to install
/* Install the panel "Add Plugin" after
* the last initialised panel */
previoustitle = title; previoustitle = title;
if( title.IsEmpty() ) if( title.IsEmpty() )
CurrPage = m_PanelNetType[PANELCUSTOMBASE + ii] = CurrPage =
new EDA_NoteBookPage(m_NoteBook, _("Add Plugin"), m_PanelNetType[PANELCUSTOMBASE + ii] =
NET_TYPE_CUSTOM1 + ii, new EDA_NoteBookPage( m_NoteBook, _( "Add Plugin" ),
ID_CURRENT_FORMAT_IS_DEFAULT, ID_SETUP_PLUGIN); NET_TYPE_CUSTOM1 + ii,
else ID_CURRENT_FORMAT_IS_DEFAULT, ID_SETUP_PLUGIN );
CurrPage = m_PanelNetType[PANELCUSTOMBASE + ii] = else /* Install a plugin panel */
new EDA_NoteBookPage(m_NoteBook, title, CurrPage =
NET_TYPE_CUSTOM1 + ii, m_PanelNetType[PANELCUSTOMBASE + ii] =
ID_CURRENT_FORMAT_IS_DEFAULT, ID_CREATE_NETLIST); new EDA_NoteBookPage( m_NoteBook, title,
NET_TYPE_CUSTOM1 + ii,
ID_CURRENT_FORMAT_IS_DEFAULT, ID_CREATE_NETLIST );
msg = CUSTOM_NETLIST_COMMAND; msg = CUSTOM_NETLIST_COMMAND;
msg << ii + 1; msg << ii + 1;
wxString Command = m_Parent->m_Parent->m_EDA_Config->Read(msg); wxString Command = m_Parent->m_Parent->m_EDA_Config->Read( msg );
CurrPage->m_CommandStringCtrl = new WinEDA_EnterText( CurrPage, CurrPage->m_CommandStringCtrl =
_("Netlist command:"), Command, new WinEDA_EnterText( CurrPage,
CurrPage->m_LowBoxSizer, wxSize(H_SIZE - 10, -1) ); _( "Netlist command:" ), Command,
CurrPage->m_LowBoxSizer,
wxDefaultSize );
CurrPage->m_TitleStringCtrl = new WinEDA_EnterText( CurrPage, CurrPage->m_TitleStringCtrl =
_("Title:"), title, new WinEDA_EnterText( CurrPage,
CurrPage->m_LowBoxSizer, wxSize(H_SIZE - 10, -1) ); _( "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 /* Browse the plugin files and set the m_CommandStringCtrl field
*/ */
{ {
wxString FullFileName, Mask, Path; wxString FullFileName, Mask, Path;
Mask = wxT("*");
Path = g_EDA_Appl->m_BinDir; Mask = wxT( "*" );
FullFileName = EDA_FileSelector( _("Plugin files:"), Path = g_EDA_Appl->m_BinDir;
Path, /* Chemin par defaut */ FullFileName = EDA_FileSelector( _( "Plugin files:" ),
FullFileName, /* nom fichier par defaut */ Path, /* Chemin par defaut */
wxEmptyString, /* extension par defaut */ FullFileName, /* nom fichier par defaut */
Mask, /* Masque d'affichage */ wxEmptyString, /* extension par defaut */
this, Mask, /* Masque d'affichage */
wxFD_OPEN, this,
TRUE wxFD_OPEN,
); TRUE
);
if( FullFileName.IsEmpty() ) if( FullFileName.IsEmpty() )
return; return;
EDA_NoteBookPage * CurrPage; EDA_NoteBookPage* CurrPage;
CurrPage = (EDA_NoteBookPage *) m_NoteBook->GetCurrentPage(); CurrPage = (EDA_NoteBookPage*) m_NoteBook->GetCurrentPage();
if( CurrPage == NULL ) if( CurrPage == NULL )
return; return;
CurrPage->m_CommandStringCtrl->SetValue(FullFileName); CurrPage->m_CommandStringCtrl->SetValue( FullFileName );
/* Get a title for this page */ /* Get a title for this page */
wxString title = CurrPage->m_TitleStringCtrl->GetValue(); wxString title = CurrPage->m_TitleStringCtrl->GetValue();
if( title.IsEmpty() ) 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 // Fonctions de positionnement des variables d'option
/*****************************************************************/ /*****************************************************************/
void WinEDA_NetlistFrame::SelectNetlistType(wxCommandEvent& event) void WinEDA_NetlistFrame::SelectNetlistType( wxCommandEvent& event )
/*****************************************************************/ /*****************************************************************/
{ {
int ii; int ii;
EDA_NoteBookPage * CurrPage; EDA_NoteBookPage* CurrPage;
for( ii = 0; ii < PANELCUSTOMBASE + CUSTOMPANEL_COUNTMAX; ii++ ) for( ii = 0; ii < PANELCUSTOMBASE + CUSTOMPANEL_COUNTMAX; ii++ )
if( m_PanelNetType[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 ) if( CurrPage == NULL )
return; return;
g_NetFormat = CurrPage->m_IdNetType; 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() void WinEDA_NetlistFrame::NetlistUpdateOpt()
/***********************************************/ /***********************************************/
{ {
int ii; int ii;
g_SimulatorCommandLine = g_SimulatorCommandLine =
m_PanelNetType[PANELSPICE]->m_CommandStringCtrl->GetValue(); 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 FullFileName, FileExt, Mask;
wxString msg, Command; wxString msg, Command;
int netformat_tmp = g_NetFormat; int netformat_tmp = g_NetFormat;
NetlistUpdateOpt(); NetlistUpdateOpt();
EDA_NoteBookPage * CurrPage; EDA_NoteBookPage* CurrPage;
CurrPage = (EDA_NoteBookPage *) m_NoteBook->GetCurrentPage(); CurrPage = (EDA_NoteBookPage*) m_NoteBook->GetCurrentPage();
g_NetFormat = CurrPage->m_IdNetType; g_NetFormat = CurrPage->m_IdNetType;
/* Calcul du nom du fichier netlist */ /* Calculate the netlist filename */
FullFileName = ScreenSch->m_FileName; FullFileName = ScreenSch->m_FileName;
switch( g_NetFormat ) switch( g_NetFormat )
{ {
case NET_TYPE_SPICE: case NET_TYPE_SPICE:
FileExt = wxT(".cir"); FileExt = wxT( ".cir" );
break; break;
case NET_TYPE_CADSTAR: case NET_TYPE_CADSTAR:
FileExt = wxT(".frp"); FileExt = wxT( ".frp" );
break; break;
default: default:
@ -432,36 +555,37 @@ EDA_NoteBookPage * CurrPage;
break; break;
} }
Mask = wxT("*") + FileExt + wxT("*"); Mask = wxT( "*" ) + FileExt + wxT( "*" );
ChangeFileNameExt(FullFileName, FileExt); ChangeFileNameExt( FullFileName, FileExt );
FullFileName = EDA_FileSelector( _("Netlist files:"), FullFileName = EDA_FileSelector( _( "Netlist files:" ),
wxEmptyString, /* Chemin par defaut */ wxEmptyString, /* Defaut path */
FullFileName, /* nom fichier par defaut */ FullFileName, /* Defaut filename */
FileExt, /* extension par defaut */ FileExt, /* Defaut extension */
Mask, /* Masque d'affichage */ Mask, /* Mask for filename selection */
this, this,
wxFD_SAVE, wxFD_SAVE,
TRUE TRUE
); );
if( FullFileName.IsEmpty() ) if( FullFileName.IsEmpty() )
return; return;
m_Parent->MsgPanel->EraseMsgBox(); m_Parent->MsgPanel->EraseMsgBox();
ReAnnotatePowerSymbolsOnly(); 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; return;
} }
/* Cleanup the entire hierarchy */ /* Cleanup the entire hierarchy */
EDA_ScreenList ScreenList(NULL); EDA_ScreenList ScreenList( NULL );
for( SCH_SCREEN * screen = ScreenList.GetFirst(); screen != NULL; screen = ScreenList.GetNext() ) for( SCH_SCREEN* screen = ScreenList.GetFirst(); screen != NULL; screen = ScreenList.GetNext() )
{ {
bool ModifyWires; bool ModifyWires;
ModifyWires = screen->SchematicCleanUp(NULL); ModifyWires = screen->SchematicCleanUp( NULL );
// if wire list has changed, delete the Undo Redo list to avoid // if wire list has changed, delete the Undo Redo list to avoid
// pointer problems with deleted data // pointer problems with deleted data
if( ModifyWires ) if( ModifyWires )
@ -477,31 +601,81 @@ EDA_NoteBookPage * CurrPage;
switch( g_NetFormat ) switch( g_NetFormat )
{ {
default: default:
WriteNetList(m_Parent, FullFileName, TRUE); WriteNetList( m_Parent, FullFileName, TRUE );
break; break;
case NET_TYPE_CADSTAR: case NET_TYPE_CADSTAR:
case NET_TYPE_ORCADPCB2: case NET_TYPE_ORCADPCB2:
WriteNetList(m_Parent, FullFileName, FALSE); WriteNetList( m_Parent, FullFileName, FALSE );
case NET_TYPE_SPICE: case NET_TYPE_SPICE:
g_OptNetListUseNames = TRUE; // Used for pspice, gnucap g_OptNetListUseNames = TRUE; // Used for pspice, gnucap
if( m_UseNetNamesInNetlist->GetSelection() == 1 ) if( m_UseNetNamesInNetlist->GetSelection() == 1 )
g_OptNetListUseNames = FALSE; g_OptNetListUseNames = FALSE;
WriteNetList(m_Parent, FullFileName, g_OptNetListUseNames); WriteNetList( m_Parent, FullFileName, g_OptNetListUseNames );
break; break;
} }
FreeTabNetList( g_TabObjNet, g_NbrObjNet ); FreeTabNetList( g_TabObjNet, g_NbrObjNet );
g_NetFormat = netformat_tmp; 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(); NetlistUpdateOpt();
// Update the new titles // Update the new titles
for( int ii = 0; ii < CUSTOMPANEL_COUNTMAX; ii++ ) 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 ) if( CurrPage == NULL )
break; break;
msg = wxT("Custom"); msg = wxT( "Custom" );
msg << ii + 1; msg << ii + 1;
if( CurrPage->m_TitleStringCtrl ) if( CurrPage->m_TitleStringCtrl )
{ {
@ -510,7 +684,7 @@ EDA_NoteBookPage * CurrPage;
{ {
msg = CUSTOM_NETLIST_TITLE; msg = CUSTOM_NETLIST_TITLE;
msg << ii + 1; 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(); Command = CurrPage->m_CommandStringCtrl->GetValue();
msg = CUSTOM_NETLIST_COMMAND; msg = CUSTOM_NETLIST_COMMAND;
msg << ii + 1; 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 = if( CurrPage->m_CommandStringCtrl->GetValue() == wxEmptyString )
m_PanelNetType[PANELSPICE]->m_CommandStringCtrl->GetValue(); {
g_SimulatorCommandLine.Trim(FALSE); DisplayError( this, _( "Error. You must provide a command String" ) );
g_SimulatorCommandLine.Trim(TRUE); return;
ExecFile = g_SimulatorCommandLine.BeforeFirst(' '); }
if( CurrPage->m_TitleStringCtrl->GetValue() == wxEmptyString )
{
DisplayError( this, _( "Error. You must provide a Title" ) );
return;
}
CommandLine = g_SimulatorCommandLine.AfterFirst(' '); WriteCurrentNetlistSetup();
EndModal( NET_PLUGIN_CHANGE );
/* Calcul du nom du fichier netlist */
NetlistFullFileName = ScreenSch->m_FileName;
ChangeFileNameExt(NetlistFullFileName, wxT(".cir"));
AddDelimiterString(NetlistFullFileName);
CommandLine += wxT(" ") + NetlistFullFileName;
ExecuteFile(this, ExecFile, CommandLine);
} }