eeschema: some fixes, see CHANGELOG

This commit is contained in:
charras 2009-04-12 14:39:54 +00:00
parent 54ee98bbc8
commit f3e4682f54
14 changed files with 387 additions and 145 deletions

View File

@ -4,6 +4,23 @@ KiCad ChangeLog 2009
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.
2009-apr-12 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
================================================================================
++eeschema:
Default libraries path are now differents for pcbnew and eeschema (as it do)
Fixed: bad library search path for schematic component docs (docs were not found)
Added: display actual lib paths in eeschema lib config dialog.
These next fix give the same behavior than "old" version
Use relative paths in libraries and doc filenames when possible
i.e when a file is found in a sub path in a default path
(very important for Windows/linux/mac compatibility of projects and their configs)
TODO: allows user to add paths in list. Currently the user path for lib is broken
(but the new code could allow the user to add more than one user path)
TODO: do the same for pcbnew and cvpcb
2009-apr-10 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr> 2009-apr-10 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
================================================================================ ================================================================================
++eeschema: ++eeschema:

View File

@ -78,13 +78,13 @@ static const wxFileTypeInfo EDAfallbacks[] =
* @param aDocName = filename of file to open (Full filename or short filename) * @param aDocName = filename of file to open (Full filename or short filename)
* @param aPaths = a wxPathList to explore. * @param aPaths = a wxPathList to explore.
* if NULL or aDocName is a full filename, aPath is not used. * if NULL or aDocName is a full filename, aPath is not used.
*/ */
bool GetAssociatedDocument( wxFrame* aFrame, bool GetAssociatedDocument( wxFrame* aFrame,
const wxString& aDocName, const wxString& aDocName,
const wxPathList* aPaths) const wxPathList* aPaths)
{ {
wxString fullfilename, file_ext; wxString docname, fullfilename, file_ext;
wxString msg; wxString msg;
wxString command; wxString command;
bool success = FALSE; bool success = FALSE;
@ -101,6 +101,14 @@ bool GetAssociatedDocument( wxFrame* aFrame,
} }
} }
docname = aDocName;
#ifdef __WINDOWS__
docname.Replace( UNIX_STRING_DIR_SEP, WIN_STRING_DIR_SEP );
#else
docname.Replace( WIN_STRING_DIR_SEP, UNIX_STRING_DIR_SEP );
#endif
/* Compute the full file name */ /* Compute the full file name */
if( wxIsAbsolutePath( aDocName ) || aPaths == NULL) if( wxIsAbsolutePath( aDocName ) || aPaths == NULL)
fullfilename = aDocName; fullfilename = aDocName;
@ -109,12 +117,6 @@ bool GetAssociatedDocument( wxFrame* aFrame,
fullfilename = aPaths->FindValidPath( aDocName ); fullfilename = aPaths->FindValidPath( aDocName );
} }
#ifdef __WINDOWS__
fullfilename.Replace( UNIX_STRING_DIR_SEP, WIN_STRING_DIR_SEP );
#else
fullfilename.Replace( WIN_STRING_DIR_SEP, UNIX_STRING_DIR_SEP );
#endif
wxString mask( wxT( "*" ) ), extension; wxString mask( wxT( "*" ) ), extension;
#ifdef __WINDOWS__ #ifdef __WINDOWS__

View File

@ -258,14 +258,20 @@ WinEDA_App::~WinEDA_App()
} }
/** /** Function InitEDA_Appl
* TODO brief * initialise some general parameters
* - Default paths (help, libs, bin)and configuration flies names
* - Language and locale
* - fonts
* @param aName : used as paths in configuration files
* @param aId = flag : APP_TYPE_EESCHEMA, APP_TYPE_PCBNEW..
* used to choose what default library path must be used
*/ */
void WinEDA_App::InitEDA_Appl( const wxString& name ) void WinEDA_App::InitEDA_Appl( const wxString& aName, id_app_type aId )
{ {
wxString EnvLang; wxString EnvLang;
m_Id = aId;
m_Checker = new wxSingleInstanceChecker( name.Lower() + wxT( "-" ) + m_Checker = new wxSingleInstanceChecker( aName.Lower() + wxT( "-" ) +
wxGetUserId() ); wxGetUserId() );
/* Init kicad environment /* Init kicad environment
@ -283,17 +289,17 @@ void WinEDA_App::InitEDA_Appl( const wxString& name )
/* Prepare On Line Help. Use only lower case for help filenames, in order to /* Prepare On Line Help. Use only lower case for help filenames, in order to
* avoid problems with upper/lower case filenames under windows and unix */ * avoid problems with upper/lower case filenames under windows and unix */
#if defined ONLINE_HELP_FILES_FORMAT_IS_HTML #if defined ONLINE_HELP_FILES_FORMAT_IS_HTML
m_HelpFileName = name.Lower() + wxT( ".html" ); m_HelpFileName = aName.Lower() + wxT( ".html" );
#elif defined ONLINE_HELP_FILES_FORMAT_IS_PDF #elif defined ONLINE_HELP_FILES_FORMAT_IS_PDF
m_HelpFileName = name.Lower() + wxT( ".pdf" ); m_HelpFileName = aName.Lower() + wxT( ".pdf" );
#else #else
#error Help files format not defined #error Help files format not defined
#endif #endif
/* Init parameters for configuration */ /* Init parameters for configuration */
SetVendorName( wxT( "kicad" ) ); SetVendorName( wxT( "kicad" ) );
SetAppName( name.Lower() ); SetAppName( aName.Lower() );
SetTitle( name ); SetTitle( aName );
m_EDA_Config = new wxConfig( ); m_EDA_Config = new wxConfig( );
wxASSERT( m_EDA_Config != NULL ); wxASSERT( m_EDA_Config != NULL );
m_EDA_CommonConfig = new wxConfig( CommonConfigPath ); m_EDA_CommonConfig = new wxConfig( CommonConfigPath );
@ -320,7 +326,7 @@ void WinEDA_App::InitEDA_Appl( const wxString& name )
g_FixedFont = new wxFont( g_FixedFontPointSize, wxFONTFAMILY_MODERN, g_FixedFont = new wxFont( g_FixedFontPointSize, wxFONTFAMILY_MODERN,
wxNORMAL, wxNORMAL ); wxNORMAL, wxNORMAL );
/* TODO installation des gestionnaires de visu d'images (pour help) TODO*/ /* Install some image handlers, mainly for help */
wxImage::AddHandler( new wxPNGHandler ); wxImage::AddHandler( new wxPNGHandler );
wxImage::AddHandler( new wxGIFHandler ); wxImage::AddHandler( new wxGIFHandler );
wxImage::AddHandler( new wxJPEGHandler ); wxImage::AddHandler( new wxJPEGHandler );
@ -478,6 +484,8 @@ void WinEDA_App::SetDefaultSearchPaths( void )
size_t i; size_t i;
wxString path = m_BinDir; wxString path = m_BinDir;
m_searchPaths.Clear();
#ifdef __WINDOWS__ #ifdef __WINDOWS__
/* m_BinDir path is in unix notation. /* m_BinDir path is in unix notation.
* But wxFileName expect (to work fine) native notation * But wxFileName expect (to work fine) native notation
@ -528,31 +536,34 @@ void WinEDA_App::SetDefaultSearchPaths( void )
} }
else else
{ {
/* Add schematic library file path to search path list. */
fn.Clear(); fn.Clear();
fn.SetPath( m_searchPaths[i] ); fn.SetPath( m_searchPaths[i] );
fn.AppendDir( wxT( "library") ); /* Add schematic library file path to search path list.
* we must add <kicad path>/library and <kicad path>/library/doc
if( fn.IsDirReadable() ) */
if ( m_Id == APP_TYPE_EESCHEMA )
{ {
wxLogDebug( wxT( "Adding <%s> to library search path list" ), fn.AppendDir( wxT( "library") );
fn.GetPath().c_str() ); if( fn.IsDirReadable() )
m_libSearchPaths.Add( fn.GetPath() ); {
} wxLogDebug( wxT( "Adding <%s> to library search path list" ),
fn.GetPath().c_str() );
m_libSearchPaths.Add( fn.GetPath() );
}
/* Add schematic doc file path (library/doc)to search path list. */ /* Add schematic doc file path (library/doc)to search path list. */
fn.RemoveLastDir(); fn.AppendDir( wxT( "doc") );
fn.AppendDir( wxT( "doc") ); if( fn.IsDirReadable() )
{
if( fn.IsDirReadable() ) wxLogDebug( wxT( "Adding <%s> to library search path list" ),
{ fn.GetPath().c_str() );
wxLogDebug( wxT( "Adding <%s> to library search path list" ), m_libSearchPaths.Add( fn.GetPath() );
fn.GetPath().c_str() ); }
m_libSearchPaths.Add( fn.GetPath() ); fn.RemoveLastDir();
fn.RemoveLastDir(); // point to <kicad path>
} }
/* Add kicad template file path to search path list. */ /* Add kicad template file path to search path list. */
fn.RemoveLastDir();
fn.AppendDir( wxT( "template" ) ); fn.AppendDir( wxT( "template" ) );
if( fn.IsDirReadable() ) if( fn.IsDirReadable() )
@ -561,26 +572,29 @@ void WinEDA_App::SetDefaultSearchPaths( void )
fn.GetPath().c_str() ); fn.GetPath().c_str() );
m_libSearchPaths.Add( fn.GetPath() ); m_libSearchPaths.Add( fn.GetPath() );
} }
fn.RemoveLastDir();
/* Add PCB library file path to search path list. */ /* Add PCB library file path to search path list. */
fn.RemoveLastDir(); if ( (m_Id == APP_TYPE_PCBNEW) || (m_Id == APP_TYPE_CVPCB) )
fn.AppendDir( wxT( "modules" ) );
if( fn.IsDirReadable() )
{ {
wxLogDebug( wxT( "Adding <%s> to library search path list" ), fn.AppendDir( wxT( "modules" ) );
fn.GetPath().c_str() );
m_libSearchPaths.Add( fn.GetPath() );
}
/* Add 3D module library file path to search path list. */ if( fn.IsDirReadable() )
fn.AppendDir( wxT( "packages3d" ) ); {
wxLogDebug( wxT( "Adding <%s> to library search path list" ),
fn.GetPath().c_str() );
m_libSearchPaths.Add( fn.GetPath() );
}
if( fn.IsDirReadable() ) /* Add 3D module library file path to search path list. */
{ fn.AppendDir( wxT( "packages3d" ) );
wxLogDebug( wxT( "Adding <%s> to library search path list" ),
fn.GetPath().c_str() ); if( fn.IsDirReadable() )
m_libSearchPaths.Add( fn.GetPath() ); {
wxLogDebug( wxT( "Adding <%s> to library search path list" ),
fn.GetPath().c_str() );
m_libSearchPaths.Add( fn.GetPath() );
}
} }
} }
} }

View File

@ -4,6 +4,7 @@
#include "fctsys.h" #include "fctsys.h"
#include "appl_wxstruct.h" #include "appl_wxstruct.h"
#include "wxstruct.h"
#include "common.h" #include "common.h"
#include "confirm.h" #include "confirm.h"
#include "gestfich.h" #include "gestfich.h"
@ -64,7 +65,7 @@ bool WinEDA_App::OnInit()
wxString currCWD = wxGetCwd(); wxString currCWD = wxGetCwd();
WinEDA_CvpcbFrame* frame = NULL; WinEDA_CvpcbFrame* frame = NULL;
InitEDA_Appl( wxT( "CVpcb" ) ); InitEDA_Appl( wxT( "CVpcb" ), APP_TYPE_CVPCB );
if( m_Checker && m_Checker->IsAnotherRunning() ) if( m_Checker && m_Checker->IsAnotherRunning() )
{ {

View File

@ -54,9 +54,9 @@ public:
void WinEDA_SchematicFrame::InstallConfigFrame( const wxPoint& pos ) void WinEDA_SchematicFrame::InstallConfigFrame( const wxPoint& pos )
/******************************************************************/ /******************************************************************/
{ {
DIALOG_EESCHEMA_CONFIG* CfgFrame = new DIALOG_EESCHEMA_CONFIG( this ); DIALOG_EESCHEMA_CONFIG CfgFrame( this );
CfgFrame->ShowModal(); CfgFrame->Destroy(); CfgFrame.ShowModal();
} }
@ -126,6 +126,13 @@ void DIALOG_EESCHEMA_CONFIG::Init()
m_ListLibr->InsertItems( g_LibName_List, 0 ); m_ListLibr->InsertItems( g_LibName_List, 0 );
m_LibDirCtrl->SetValue( g_UserLibDirBuffer ); m_LibDirCtrl->SetValue( g_UserLibDirBuffer );
// Display actual libraries paths:
wxPathList libpaths = wxGetApp().GetLibraryPathList();
for( unsigned ii = 0; ii < libpaths.GetCount(); ii++ )
{
m_DefaultLibraryPathslistBox->Append( libpaths[ii]);
}
} }
@ -148,6 +155,7 @@ void DIALOG_EESCHEMA_CONFIG::OnOkClick( wxCommandEvent& event )
if ( g_UserLibDirBuffer != m_LibDirCtrl->GetValue() ) if ( g_UserLibDirBuffer != m_LibDirCtrl->GetValue() )
{ {
g_UserLibDirBuffer = m_LibDirCtrl->GetValue(); g_UserLibDirBuffer = m_LibDirCtrl->GetValue();
wxGetApp().SetDefaultSearchPaths( );
m_LibListChanged = true; m_LibListChanged = true;
} }
@ -206,7 +214,7 @@ void DIALOG_EESCHEMA_CONFIG::OnAddOrInsertLibClick( wxCommandEvent& event )
*/ */
{ {
int ii; int ii;
wxString tmp; wxString libfilename;
wxFileName fn; wxFileName fn;
ii = m_ListLibr->GetSelection(); ii = m_ListLibr->GetSelection();
@ -233,24 +241,38 @@ void DIALOG_EESCHEMA_CONFIG::OnAddOrInsertLibClick( wxCommandEvent& event )
/* If the library path is already in the library search paths /* If the library path is already in the library search paths
* list, just add the library name to the list. Otherwise, add * list, just add the library name to the list. Otherwise, add
* the library name with the full path. */ * the library name with the full or relative path.
if( wxGetApp().GetLibraryPathList().Index( fn.GetPath() ) == wxNOT_FOUND ) * the relative path, when possible is preferable,
tmp = fn.GetPathWithSep() + fn.GetName(); * because it preserve use of default libraries paths, when the path is a sub path of these default paths
else *
tmp = fn.GetName(); */
if( wxGetApp().GetLibraryPathList().Index( fn.GetPath() ) != wxNOT_FOUND ) // Ok, trivial case
libfilename = fn.GetName();
else // not in the default, : see if this file is in a subpath:
{
libfilename = fn.GetPathWithSep() + fn.GetName();
for ( unsigned kk = 0; kk < wxGetApp().GetLibraryPathList().GetCount(); kk ++ )
{
if( fn.MakeRelativeTo(wxGetApp().GetLibraryPathList()[kk] ) )
{
libfilename = fn.GetPathWithSep() + fn.GetName();
break;
}
}
}
//Add or insert new library name, if not already in list //Add or insert new library name, if not already in list
if( m_ListLibr->FindString( tmp, fn.IsCaseSensitive() ) == wxNOT_FOUND ) if( m_ListLibr->FindString( libfilename, fn.IsCaseSensitive() ) == wxNOT_FOUND )
{ {
m_LibListChanged = TRUE; m_LibListChanged = TRUE;
if( event.GetId() == ID_ADD_LIB ) if( event.GetId() == ID_ADD_LIB )
m_ListLibr->Append( tmp ); m_ListLibr->Append( libfilename );
else else
m_ListLibr->Insert( tmp, ii++ ); m_ListLibr->Insert( libfilename, ii++ );
} }
else else
{ {
wxString msg = wxT( "<" ) + tmp + wxT( "> : " ) + wxString msg = wxT( "<" ) + libfilename + wxT( "> : " ) +
_( "Library already in use" ); _( "Library already in use" );
DisplayError( this, msg ); DisplayError( this, msg );
} }

View File

@ -124,15 +124,29 @@ DIALOG_EESCHEMA_CONFIG_FBP::DIALOG_EESCHEMA_CONFIG_FBP( wxWindow* parent, wxWind
bMainSizer->Add( m_staticline1, 0, wxEXPAND | wxALL, 5 ); bMainSizer->Add( m_staticline1, 0, wxEXPAND | wxALL, 5 );
wxStaticBoxSizer* sbLibPathSizer; wxStaticBoxSizer* sbLibPathSizer;
sbLibPathSizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Default library file path:") ), wxHORIZONTAL ); sbLibPathSizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Libraries Files Main Default Path:") ), wxVERTICAL );
wxBoxSizer* bUserLibPathSizer;
bUserLibPathSizer = new wxBoxSizer( wxHORIZONTAL );
m_LibDirCtrl = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); m_LibDirCtrl = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
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/share/library") ); 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/share/library") );
sbLibPathSizer->Add( m_LibDirCtrl, 1, wxALL, 5 ); bUserLibPathSizer->Add( m_LibDirCtrl, 1, wxALL, 5 );
m_buttonBrowse = new wxButton( this, ID_LIB_PATH_SEL, _("Browse"), wxDefaultPosition, wxDefaultSize, 0 ); m_buttonBrowse = new wxButton( this, ID_LIB_PATH_SEL, _("Browse"), wxDefaultPosition, wxDefaultSize, 0 );
sbLibPathSizer->Add( m_buttonBrowse, 0, wxALL, 5 ); bUserLibPathSizer->Add( m_buttonBrowse, 0, wxALL, 5 );
sbLibPathSizer->Add( bUserLibPathSizer, 1, wxEXPAND, 5 );
m_staticTextcurrenpaths = new wxStaticText( this, wxID_ANY, _("Current Libraries Full Paths in Use:"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticTextcurrenpaths->Wrap( -1 );
sbLibPathSizer->Add( m_staticTextcurrenpaths, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
m_DefaultLibraryPathslistBox = new wxListBox( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0, NULL, wxLB_NEEDED_SB );
m_DefaultLibraryPathslistBox->SetMinSize( wxSize( -1,70 ) );
sbLibPathSizer->Add( m_DefaultLibraryPathslistBox, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
bMainSizer->Add( sbLibPathSizer, 0, wxEXPAND, 5 ); bMainSizer->Add( sbLibPathSizer, 0, wxEXPAND, 5 );

View File

@ -32,7 +32,7 @@
<property name="minimum_size"></property> <property name="minimum_size"></property>
<property name="name">DIALOG_EESCHEMA_CONFIG_FBP</property> <property name="name">DIALOG_EESCHEMA_CONFIG_FBP</property>
<property name="pos"></property> <property name="pos"></property>
<property name="size">593,400</property> <property name="size">593,445</property>
<property name="style">wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER</property> <property name="style">wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER</property>
<property name="subclass"></property> <property name="subclass"></property>
<property name="title"></property> <property name="title"></property>
@ -995,17 +995,135 @@
<property name="proportion">0</property> <property name="proportion">0</property>
<object class="wxStaticBoxSizer" expanded="1"> <object class="wxStaticBoxSizer" expanded="1">
<property name="id">wxID_ANY</property> <property name="id">wxID_ANY</property>
<property name="label">Default library file path:</property> <property name="label">Libraries Files Main Default Path:</property>
<property name="minimum_size"></property> <property name="minimum_size"></property>
<property name="name">sbLibPathSizer</property> <property name="name">sbLibPathSizer</property>
<property name="orient">wxHORIZONTAL</property> <property name="orient">wxVERTICAL</property>
<property name="permission">none</property> <property name="permission">none</property>
<event name="OnUpdateUI"></event> <event name="OnUpdateUI"></event>
<object class="sizeritem" expanded="1"> <object class="sizeritem" expanded="1">
<property name="border">5</property> <property name="border">5</property>
<property name="flag">wxALL</property> <property name="flag">wxEXPAND</property>
<property name="proportion">1</property> <property name="proportion">1</property>
<object class="wxTextCtrl" expanded="1"> <object class="wxBoxSizer" expanded="1">
<property name="minimum_size"></property>
<property name="name">bUserLibPathSizer</property>
<property name="orient">wxHORIZONTAL</property>
<property name="permission">none</property>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxALL</property>
<property name="proportion">1</property>
<object class="wxTextCtrl" expanded="1">
<property name="bg"></property>
<property name="context_help"></property>
<property name="enabled">1</property>
<property name="fg"></property>
<property name="font"></property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="maximum_size"></property>
<property name="maxlength">0</property>
<property name="minimum_size"></property>
<property name="name">m_LibDirCtrl</property>
<property name="permission">protected</property>
<property name="pos"></property>
<property name="size"></property>
<property name="style"></property>
<property name="subclass"></property>
<property name="tooltip">Default path to search libraries which have no absolute path in name,&#x0A;or a name which does not start by ./ or ../&#x0A;If void, the default path is kicad/share/library</property>
<property name="value"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnChar"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
<event name="OnKeyUp"></event>
<event name="OnKillFocus"></event>
<event name="OnLeaveWindow"></event>
<event name="OnLeftDClick"></event>
<event name="OnLeftDown"></event>
<event name="OnLeftUp"></event>
<event name="OnMiddleDClick"></event>
<event name="OnMiddleDown"></event>
<event name="OnMiddleUp"></event>
<event name="OnMotion"></event>
<event name="OnMouseEvents"></event>
<event name="OnMouseWheel"></event>
<event name="OnPaint"></event>
<event name="OnRightDClick"></event>
<event name="OnRightDown"></event>
<event name="OnRightUp"></event>
<event name="OnSetFocus"></event>
<event name="OnSize"></event>
<event name="OnText"></event>
<event name="OnTextEnter"></event>
<event name="OnTextMaxLen"></event>
<event name="OnTextURL"></event>
<event name="OnUpdateUI"></event>
</object>
</object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxALL</property>
<property name="proportion">0</property>
<object class="wxButton" expanded="1">
<property name="bg"></property>
<property name="context_help"></property>
<property name="default">0</property>
<property name="enabled">1</property>
<property name="fg"></property>
<property name="font"></property>
<property name="hidden">0</property>
<property name="id">ID_LIB_PATH_SEL</property>
<property name="label">Browse</property>
<property name="maximum_size"></property>
<property name="minimum_size"></property>
<property name="name">m_buttonBrowse</property>
<property name="permission">protected</property>
<property name="pos"></property>
<property name="size"></property>
<property name="style"></property>
<property name="subclass"></property>
<property name="tooltip"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnButtonClick">OnLibPathSelClick</event>
<event name="OnChar"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
<event name="OnKeyUp"></event>
<event name="OnKillFocus"></event>
<event name="OnLeaveWindow"></event>
<event name="OnLeftDClick"></event>
<event name="OnLeftDown"></event>
<event name="OnLeftUp"></event>
<event name="OnMiddleDClick"></event>
<event name="OnMiddleDown"></event>
<event name="OnMiddleUp"></event>
<event name="OnMotion"></event>
<event name="OnMouseEvents"></event>
<event name="OnMouseWheel"></event>
<event name="OnPaint"></event>
<event name="OnRightDClick"></event>
<event name="OnRightDown"></event>
<event name="OnRightUp"></event>
<event name="OnSetFocus"></event>
<event name="OnSize"></event>
<event name="OnUpdateUI"></event>
</object>
</object>
</object>
</object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxTOP|wxRIGHT|wxLEFT</property>
<property name="proportion">0</property>
<object class="wxStaticText" expanded="1">
<property name="bg"></property> <property name="bg"></property>
<property name="context_help"></property> <property name="context_help"></property>
<property name="enabled">1</property> <property name="enabled">1</property>
@ -1013,20 +1131,20 @@
<property name="font"></property> <property name="font"></property>
<property name="hidden">0</property> <property name="hidden">0</property>
<property name="id">wxID_ANY</property> <property name="id">wxID_ANY</property>
<property name="label">Current Libraries Full Paths in Use:</property>
<property name="maximum_size"></property> <property name="maximum_size"></property>
<property name="maxlength">0</property>
<property name="minimum_size"></property> <property name="minimum_size"></property>
<property name="name">m_LibDirCtrl</property> <property name="name">m_staticTextcurrenpaths</property>
<property name="permission">protected</property> <property name="permission">protected</property>
<property name="pos"></property> <property name="pos"></property>
<property name="size"></property> <property name="size"></property>
<property name="style"></property> <property name="style"></property>
<property name="subclass"></property> <property name="subclass"></property>
<property name="tooltip">Default path to search libraries which have no absolute path in name,&#x0A;or a name which does not start by ./ or ../&#x0A;If void, the default path is kicad/share/library</property> <property name="tooltip"></property>
<property name="value"></property>
<property name="window_extra_style"></property> <property name="window_extra_style"></property>
<property name="window_name"></property> <property name="window_name"></property>
<property name="window_style"></property> <property name="window_style"></property>
<property name="wrap">-1</property>
<event name="OnChar"></event> <event name="OnChar"></event>
<event name="OnEnterWindow"></event> <event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event> <event name="OnEraseBackground"></event>
@ -1049,40 +1167,34 @@
<event name="OnRightUp"></event> <event name="OnRightUp"></event>
<event name="OnSetFocus"></event> <event name="OnSetFocus"></event>
<event name="OnSize"></event> <event name="OnSize"></event>
<event name="OnText"></event>
<event name="OnTextEnter"></event>
<event name="OnTextMaxLen"></event>
<event name="OnTextURL"></event>
<event name="OnUpdateUI"></event> <event name="OnUpdateUI"></event>
</object> </object>
</object> </object>
<object class="sizeritem" expanded="1"> <object class="sizeritem" expanded="1">
<property name="border">5</property> <property name="border">5</property>
<property name="flag">wxALL</property> <property name="flag">wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT</property>
<property name="proportion">0</property> <property name="proportion">0</property>
<object class="wxButton" expanded="1"> <object class="wxListBox" expanded="1">
<property name="bg"></property> <property name="bg"></property>
<property name="choices"></property>
<property name="context_help"></property> <property name="context_help"></property>
<property name="default">0</property>
<property name="enabled">1</property> <property name="enabled">1</property>
<property name="fg"></property> <property name="fg"></property>
<property name="font"></property> <property name="font"></property>
<property name="hidden">0</property> <property name="hidden">0</property>
<property name="id">ID_LIB_PATH_SEL</property> <property name="id">wxID_ANY</property>
<property name="label">Browse</property>
<property name="maximum_size"></property> <property name="maximum_size"></property>
<property name="minimum_size"></property> <property name="minimum_size">-1,70</property>
<property name="name">m_buttonBrowse</property> <property name="name">m_DefaultLibraryPathslistBox</property>
<property name="permission">protected</property> <property name="permission">protected</property>
<property name="pos"></property> <property name="pos"></property>
<property name="size"></property> <property name="size"></property>
<property name="style"></property> <property name="style">wxLB_NEEDED_SB</property>
<property name="subclass"></property> <property name="subclass"></property>
<property name="tooltip"></property> <property name="tooltip"></property>
<property name="window_extra_style"></property> <property name="window_extra_style"></property>
<property name="window_name"></property> <property name="window_name"></property>
<property name="window_style"></property> <property name="window_style"></property>
<event name="OnButtonClick">OnLibPathSelClick</event>
<event name="OnChar"></event> <event name="OnChar"></event>
<event name="OnEnterWindow"></event> <event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event> <event name="OnEraseBackground"></event>
@ -1093,6 +1205,8 @@
<event name="OnLeftDClick"></event> <event name="OnLeftDClick"></event>
<event name="OnLeftDown"></event> <event name="OnLeftDown"></event>
<event name="OnLeftUp"></event> <event name="OnLeftUp"></event>
<event name="OnListBox"></event>
<event name="OnListBoxDClick"></event>
<event name="OnMiddleDClick"></event> <event name="OnMiddleDClick"></event>
<event name="OnMiddleDown"></event> <event name="OnMiddleDown"></event>
<event name="OnMiddleUp"></event> <event name="OnMiddleUp"></event>

View File

@ -62,6 +62,8 @@ class DIALOG_EESCHEMA_CONFIG_FBP : public wxDialog
wxStaticLine* m_staticline1; wxStaticLine* m_staticline1;
wxTextCtrl* m_LibDirCtrl; wxTextCtrl* m_LibDirCtrl;
wxButton* m_buttonBrowse; wxButton* m_buttonBrowse;
wxStaticText* m_staticTextcurrenpaths;
wxListBox* m_DefaultLibraryPathslistBox;
// Virtual event handlers, overide them in your derived class // Virtual event handlers, overide them in your derived class
virtual void OnCloseWindow( wxCloseEvent& event ){ event.Skip(); } virtual void OnCloseWindow( wxCloseEvent& event ){ event.Skip(); }
@ -74,7 +76,7 @@ class DIALOG_EESCHEMA_CONFIG_FBP : public wxDialog
public: public:
DIALOG_EESCHEMA_CONFIG_FBP( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = wxEmptyString, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 593,400 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER ); DIALOG_EESCHEMA_CONFIG_FBP( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = wxEmptyString, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 593,445 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER );
~DIALOG_EESCHEMA_CONFIG_FBP(); ~DIALOG_EESCHEMA_CONFIG_FBP();
}; };

View File

@ -4,6 +4,7 @@
#include "fctsys.h" #include "fctsys.h"
#include "gr_basic.h" #include "gr_basic.h"
#include "appl_wxstruct.h"
#include "common.h" #include "common.h"
#include "confirm.h" #include "confirm.h"
#include "gestfich.h" #include "gestfich.h"
@ -198,7 +199,7 @@ void WinEDA_PartPropertiesFrame::BuildPanelFootprintFilter()
PanelFpFilterBoxSizer->Add( RightBoxSizer, 0, wxALIGN_CENTER_VERTICAL | wxALL, 5 ); PanelFpFilterBoxSizer->Add( RightBoxSizer, 0, wxALIGN_CENTER_VERTICAL | wxALL, 5 );
wxButton* Button = new wxButton( m_PanelFootprintFilter, wxButton* Button = new wxButton( m_PanelFootprintFilter,
ID_ADD_FOOTPRINT_FILTER, _( ID_ADD_FOOTPRINT_FILTER, _(
"Add" ) ); "Add" ) );
Button->SetForegroundColour( *wxBLUE ); Button->SetForegroundColour( *wxBLUE );
@ -380,8 +381,8 @@ void WinEDA_PartPropertiesFrame::PartPropertiesAccept( wxCommandEvent& event )
} }
else else
{ {
CurrentLibEntry->m_AliasList[m_AliasLocation + ALIAS_DOC] = m_Doc->GetValue(); CurrentLibEntry->m_AliasList[m_AliasLocation + ALIAS_DOC] = m_Doc->GetValue();
CurrentLibEntry->m_AliasList[m_AliasLocation + ALIAS_KEYWORD] = m_Keywords->GetValue(); CurrentLibEntry->m_AliasList[m_AliasLocation + ALIAS_KEYWORD] = m_Keywords->GetValue();
CurrentLibEntry->m_AliasList[m_AliasLocation + ALIAS_DOC_FILENAME] = m_Docfile->GetValue(); CurrentLibEntry->m_AliasList[m_AliasLocation + ALIAS_DOC_FILENAME] = m_Docfile->GetValue();
} }
@ -391,7 +392,8 @@ void WinEDA_PartPropertiesFrame::PartPropertiesAccept( wxCommandEvent& event )
for( ii = 0; ii < jj; ii++ ) for( ii = 0; ii < jj; ii++ )
{ {
if( LocateAlias( CurrentLibEntry->m_AliasList, m_PartAliasList->GetString( ii ) ) < 0 ) if( LocateAlias( CurrentLibEntry->m_AliasList, m_PartAliasList->GetString( ii ) ) < 0 )
{ // new alias must be created {
// new alias must be created
CurrentLibEntry->m_AliasList.Add( m_PartAliasList->GetString( ii ) ); CurrentLibEntry->m_AliasList.Add( m_PartAliasList->GetString( ii ) );
CurrentLibEntry->m_AliasList.Add( wxEmptyString ); // Add a void doc string CurrentLibEntry->m_AliasList.Add( wxEmptyString ); // Add a void doc string
CurrentLibEntry->m_AliasList.Add( wxEmptyString ); // Add a void keyword list string CurrentLibEntry->m_AliasList.Add( wxEmptyString ); // Add a void keyword list string
@ -528,7 +530,7 @@ void WinEDA_PartPropertiesFrame::AddAliasOfPart( wxCommandEvent& WXUNUSED (event
if( CurrentLibEntry == NULL ) if( CurrentLibEntry == NULL )
return; return;
if( Get_Message( _( "New alias:" ), _("Component Alias"), Line, this ) != 0 ) if( Get_Message( _( "New alias:" ), _( "Component Alias" ), Line, this ) != 0 )
return; return;
Line.Replace( wxT( " " ), wxT( "_" ) ); Line.Replace( wxT( " " ), wxT( "_" ) );
@ -706,7 +708,7 @@ bool WinEDA_PartPropertiesFrame::SetUnsetConvert()
NextDrawItem = CopyDrawEntryStruct( this, DrawItem ); NextDrawItem = CopyDrawEntryStruct( this, DrawItem );
NextDrawItem->SetNext( CurrentLibEntry->m_Drawings ); NextDrawItem->SetNext( CurrentLibEntry->m_Drawings );
CurrentLibEntry->m_Drawings = NextDrawItem; CurrentLibEntry->m_Drawings = NextDrawItem;
NextDrawItem->m_Convert = 2; NextDrawItem->m_Convert = 2;
} }
} }
} }
@ -756,7 +758,7 @@ void WinEDA_PartPropertiesFrame::BrowseAndSelectDocFile( wxCommandEvent& event )
docpath += wxT( "doc" ); docpath += wxT( "doc" );
docpath += STRING_DIR_SEP; docpath += STRING_DIR_SEP;
mask = wxT( "*" ); mask = wxT( "*" );
FullFileName = EDA_FileSelector( _( "Doc Files" ), FullFileName = EDA_FileSelector( _( "Doc Files" ),
docpath, /* Chemin par defaut */ docpath, /* Chemin par defaut */
wxEmptyString, /* nom fichier par defaut */ wxEmptyString, /* nom fichier par defaut */
@ -770,7 +772,35 @@ void WinEDA_PartPropertiesFrame::BrowseAndSelectDocFile( wxCommandEvent& event )
return; return;
// Suppression du chemin par defaut pour le fichier de doc: // Suppression du chemin par defaut pour le fichier de doc:
filename = MakeReducedFileName( FullFileName, docpath, wxEmptyString );
/* If the library path is already in the library search paths
* list, just add the library name to the list. Otherwise, add
* the library name with the full or relative path.
* the relative path, when possible is preferable,
* because it preserve use of default libraries paths, when the path is a sub path of these default paths
*
*/
wxFileName fn = FullFileName;
int pathlen = -1; // path len, used to find the better subpath within defualts paths
if( wxGetApp().GetLibraryPathList().Index( fn.GetPath() ) != wxNOT_FOUND ) // Ok, trivial case
filename = fn.GetName();
else // not in the default, : see if this file is in a subpath:
{
filename = fn.GetPathWithSep() + fn.GetName();
for( unsigned kk = 0; kk < wxGetApp().GetLibraryPathList().GetCount(); kk++ )
{
if( fn.MakeRelativeTo( wxGetApp().GetLibraryPathList()[kk] ) )
{
if( pathlen < 0 // a subpath is found
|| pathlen > (int) fn.GetPath().Len() ) // a better subpath if found
{
filename = fn.GetPathWithSep() + fn.GetName();
pathlen = fn.GetPath().Len();
}
fn = FullFileName; //Try to find a better subpath
}
}
}
m_Docfile->SetValue( filename ); m_Docfile->SetValue( filename );
} }
@ -802,7 +832,7 @@ void WinEDA_PartPropertiesFrame::AddFootprintFilter( wxCommandEvent& WXUNUSED (e
if( CurrentLibEntry == NULL ) if( CurrentLibEntry == NULL )
return; return;
if( Get_Message( _( "New FootprintFilter:" ), _("Footprint Filter"), Line, this ) != 0 ) if( Get_Message( _( "New FootprintFilter:" ), _( "Footprint Filter" ), Line, this ) != 0 )
return; return;
Line.Replace( wxT( " " ), wxT( "_" ) ); Line.Replace( wxT( " " ), wxT( "_" ) );

View File

@ -148,7 +148,7 @@ bool WinEDA_App::OnInit()
g_DebugLevel = 0; // Debug level */ g_DebugLevel = 0; // Debug level */
InitEDA_Appl( wxT( "EESchema" ) ); InitEDA_Appl( wxT( "EESchema" ), APP_TYPE_EESCHEMA );
if( m_Checker && m_Checker->IsAnotherRunning() ) if( m_Checker && m_Checker->IsAnotherRunning() )
{ {

View File

@ -39,7 +39,7 @@ bool WinEDA_App::OnInit()
wxFileName fn; wxFileName fn;
WinEDA_GerberFrame* frame = NULL; WinEDA_GerberFrame* frame = NULL;
InitEDA_Appl( wxT( "GerbView" ) ); InitEDA_Appl( wxT( "GerbView" ), APP_TYPE_GERBVIEW );
ScreenPcb = new PCB_SCREEN(); ScreenPcb = new PCB_SCREEN();
ScreenPcb->m_CurrentSheetDesc = &g_Sheet_GERBER; ScreenPcb->m_CurrentSheetDesc = &g_Sheet_GERBER;

View File

@ -15,6 +15,14 @@
#include <wx/config.h> #include <wx/config.h>
#include <wx/filename.h> #include <wx/filename.h>
enum id_app_type {
APP_TYPE_UNKOWN,
APP_TYPE_EESCHEMA,
APP_TYPE_PCBNEW,
APP_TYPE_CVPCB,
APP_TYPE_GERBVIEW,
APP_TYPE_KICAD,
};
class wxConfigBase; class wxConfigBase;
class wxFileConfig; class wxFileConfig;
@ -30,6 +38,9 @@ class wxHtmlHelpController;
class WinEDA_App : public wxApp class WinEDA_App : public wxApp
{ {
public: public:
id_app_type m_Id; /* Used mainly to handle default paths libs
* m_Id = APP_TYPE_EESCHEMA, APP_TYPE_PCBNEW ...
*/
wxString m_Project; wxString m_Project;
wxSingleInstanceChecker* m_Checker; wxSingleInstanceChecker* m_Checker;
@ -50,30 +61,41 @@ public:
* variable d'environnement KICAD, * variable d'environnement KICAD,
* typiquement /usr/local/kicad ou * typiquement /usr/local/kicad ou
* c:\kicad */ * c:\kicad */
bool m_Env_Defined; // TRUE si variable d'environnement KICAD definie bool m_Env_Defined; // TRUE si variable d'environnement KICAD definie
wxLocale* m_Locale; // Gestion de la localisation wxLocale* m_Locale; // Gestion de la localisation
int m_LanguageId; // indicateur de choix du langage ( 0 = defaut) int m_LanguageId; // indicateur de choix du langage ( 0 = defaut)
wxString m_PdfBrowser; // Name of the selected browser, for browsing pdf datasheets wxString m_PdfBrowser; // Name of the selected browser, for browsing pdf datasheets
bool m_PdfBrowserIsDefault; // True if the pdf browser is the default (m_PdfBrowser not used) bool m_PdfBrowserIsDefault; // True if the pdf browser is the default (m_PdfBrowser not used)
wxPathList m_searchPaths; wxPathList m_searchPaths;
wxFileHistory m_fileHistory; wxFileHistory m_fileHistory;
protected: protected:
wxString m_Title; wxString m_Title;
wxPathList m_libSearchPaths; wxPathList m_libSearchPaths;
wxFileName m_projectFileName; wxFileName m_projectFileName;
public: public:
WinEDA_App(); WinEDA_App();
~WinEDA_App(); ~WinEDA_App();
bool OnInit(); bool OnInit();
int OnRun(); int OnRun();
bool SetBinDir(); bool SetBinDir();
void SetDefaultSearchPaths( void ); void SetDefaultSearchPaths( void );
void InitEDA_Appl( const wxString& name );
bool SetLanguage( bool first_time = FALSE ); /** Function InitEDA_Appl
* initialise some general parameters
* - Default paths (help, libs, bin)and configuration flies names
* - Language and locale
* - fonts
* @param aName : used as paths in configuration files
* @param aId = flag : LIBRARY_TYPE_EESCHEMA or LIBRARY_TYPE_PCBNEW
* used to choose what default library path must be used
*/
void InitEDA_Appl( const wxString& aName, id_app_type aId = APP_TYPE_UNKOWN);
bool SetLanguage( bool first_time = FALSE );
/** Function AddMenuLanguageList /** Function AddMenuLanguageList
* *
@ -85,47 +107,48 @@ public:
* *
* @return the sub menu Language list * @return the sub menu Language list
*/ */
void AddMenuLanguageList( wxMenu* MasterMenu ); void AddMenuLanguageList( wxMenu* MasterMenu );
void SetLanguageIdentifier( int menu_id ); void SetLanguageIdentifier( int menu_id );
void SetLanguagePath( void ); void SetLanguagePath( void );
void InitOnLineHelp(); void InitOnLineHelp();
// Sauvegarde de configurations et options: // Sauvegarde de configurations et options:
void GetSettings(); void GetSettings();
void SaveSettings(); void SaveSettings();
void WriteProjectConfig( const wxString& local_config_filename,
const wxString& GroupName,
PARAM_CFG_BASE** List );
void WriteProjectConfig( const wxString& local_config_filename,
const wxString& GroupName,
PARAM_CFG_BASE** List );
/** Function SaveCurrentSetupValues() /** Function SaveCurrentSetupValues()
* Save the current setup values in m_EDA_Config * Save the current setup values in m_EDA_Config
* saved parameters are parameters that have the .m_Setup member set to true * saved parameters are parameters that have the .m_Setup member set to true
* @param aList = array of PARAM_CFG_BASE pointers * @param aList = array of PARAM_CFG_BASE pointers
*/ */
void SaveCurrentSetupValues( PARAM_CFG_BASE** aList ); void SaveCurrentSetupValues( PARAM_CFG_BASE** aList );
/** Function ReadCurrentSetupValues() /** Function ReadCurrentSetupValues()
* Raed the current setup values previously saved, from m_EDA_Config * Raed the current setup values previously saved, from m_EDA_Config
* saved parameters are parameters that have the .m_Setup member set to true * saved parameters are parameters that have the .m_Setup member set to true
* @param aList = array of PARAM_CFG_BASE pointers * @param aList = array of PARAM_CFG_BASE pointers
*/ */
void ReadCurrentSetupValues( PARAM_CFG_BASE** aList ); void ReadCurrentSetupValues( PARAM_CFG_BASE** aList );
bool ReadProjectConfig( const wxString& local_config_filename, bool ReadProjectConfig( const wxString& local_config_filename,
const wxString& GroupName, PARAM_CFG_BASE** List, const wxString& GroupName, PARAM_CFG_BASE** List,
bool Load_Only_if_New ); bool Load_Only_if_New );
bool ReCreatePrjConfig( const wxString& local_config_filename, bool ReCreatePrjConfig( const wxString& local_config_filename,
const wxString& GroupName, const wxString& GroupName,
bool ForceUseLocalConfig ); bool ForceUseLocalConfig );
void ReadPdfBrowserInfos(); void ReadPdfBrowserInfos();
void WritePdfBrowserInfos(); void WritePdfBrowserInfos();
wxString FindFileInSearchPaths( const wxString& filename, wxString FindFileInSearchPaths( const wxString& filename,
const wxArrayString* subdirs = NULL ); const wxArrayString* subdirs = NULL );
wxString GetHelpFile( void ); wxString GetHelpFile( void );
wxString GetLibraryFile( const wxString& filename ); wxString GetLibraryFile( const wxString& filename );
wxString& GetEditorName(); wxString& GetEditorName();
const wxString& GetTitle() { return m_Title; } const wxString& GetTitle() { return m_Title; }
@ -133,10 +156,13 @@ public:
wxPathList& GetLibraryPathList() { return m_libSearchPaths; } wxPathList& GetLibraryPathList() { return m_libSearchPaths; }
wxString FindLibraryPath( const wxString& fileName ); wxString FindLibraryPath( const wxString& fileName );
wxString FindLibraryPath( const wxFileName& fileName ) wxString FindLibraryPath( const wxFileName& fileName )
{ {
return FindLibraryPath( fileName.GetFullPath() ); return FindLibraryPath( fileName.GetFullPath() );
} }
void RemoveLibraryPath( const wxString& path ); void RemoveLibraryPath( const wxString& path );
void InsertLibraryPath( const wxString& path, size_t index ); void InsertLibraryPath( const wxString& path, size_t index );
}; };
@ -146,6 +172,6 @@ public:
* of the application pointer all over the place or worse yet in a global * of the application pointer all over the place or worse yet in a global
* variable. * variable.
*/ */
DECLARE_APP(WinEDA_App); DECLARE_APP( WinEDA_App );
#endif /* APPL_WXSTRUCT_H */ #endif /* APPL_WXSTRUCT_H */

View File

@ -369,7 +369,7 @@ bool WinEDA_App::OnInit()
{ {
WinEDA_MainFrame* frame; WinEDA_MainFrame* frame;
InitEDA_Appl( wxT( "KiCad" ) ); InitEDA_Appl( wxT( "KiCad" ), APP_TYPE_KICAD );
/* init kicad */ /* init kicad */
GetSettings(); // read current setup GetSettings(); // read current setup

View File

@ -96,7 +96,7 @@ bool WinEDA_App::OnInit()
wxFileName fn; wxFileName fn;
WinEDA_PcbFrame* frame = NULL; WinEDA_PcbFrame* frame = NULL;
InitEDA_Appl( wxT( "PCBnew" ) ); InitEDA_Appl( wxT( "PCBnew" ), APP_TYPE_PCBNEW );
if( m_Checker && m_Checker->IsAnotherRunning() ) if( m_Checker && m_Checker->IsAnotherRunning() )
{ {