This commit is contained in:
dickelbeck 2008-02-19 00:35:45 +00:00
parent ce04867e84
commit 8eff8df94b
4 changed files with 613 additions and 545 deletions

View File

@ -277,10 +277,10 @@ wxString ReturnPcbLayerName( int layer_number, bool omitSpacePadding )
*/
{
#if 0 && defined(DEBUG)
#if 1 && defined(DEBUG)
// Dick: this code is working fine, but we have no place to store the layer names yet.
const unsigned LAYER_LIMIT = 29;
// @todo: these layer names should be configurable on a per project basis.
@ -288,17 +288,17 @@ wxString ReturnPcbLayerName( int layer_number, bool omitSpacePadding )
// deriving the file names from the "configured" layer names.
// The main idea is to use a single array of names, and then remove
// spaces on the fly from the names when writing to disk.
#if 1 // my specific layer names
#if 1 // my specific layer names
static const wxString layer_name_list[] = {
_( "H2 Bottom" ), _( "Power" ), _( "V2 Signal" ), _( "H1 Signal" ),
_( "Ground" ), _( "Inner L5 " ), _( "Inner L6 " ), _( "Inner L7 " ),
_( "Inner L8 " ), _( "Inner L9 " ), _( "Inner L10" ), _( "Inner L11" ),
_( "Ground" ), _( "Inner L5" ), _( "Inner L6" ), _( "Inner L7" ),
_( "Inner L8" ), _( "Inner L9" ), _( "Inner L10" ), _( "Inner L11" ),
_( "Inner L12" ), _( "Inner L13" ), _( "Inner L14" ), _( "Component" ),
_( "Adhes Cop" ), _( "Adhes Cmp" ), _( "SoldP Cop" ), _( "SoldP Cmp" ),
_( "SilkS Cop" ), _( "SilkS Cmp" ), _( "Mask Cop " ), _( "Mask Cmp " ),
_( "Drawings " ), _( "Comments " ), _( "Eco1 " ), _( "Eco2 " ),
_( "SilkS Cop" ), _( "SilkS Cmp" ), _( "Mask Cop" ), _( "Mask Cmp" ),
_( "Drawings " ), _( "Comments" ), _( "Eco1" ), _( "Eco2" ),
_( "Edges Pcb" ), _( "BAD INDEX" ),
};
#else
@ -319,22 +319,22 @@ wxString ReturnPcbLayerName( int layer_number, bool omitSpacePadding )
layer_number = LAYER_LIMIT;
const wxString* p = &layer_name_list[layer_number];
if( omitSpacePadding )
{
wxString ret = *p; // copy the string
// modify the copy
ret.Trim();
ret.Replace( wxT(" "), wxT("_") );
return ret;
}
else
return *p;
#else // long standing established code:
static const wxString layer_name_list[] = {
_( "Copper " ), _( "Inner L1 " ), _( "Inner L2 " ), _( "Inner L3 " ),
_( "Inner L4 " ), _( "Inner L5 " ), _( "Inner L6 " ), _( "Inner L7 " ),
@ -346,7 +346,7 @@ wxString ReturnPcbLayerName( int layer_number, bool omitSpacePadding )
_( "Edges Pcb" ), _( "--- " ), _( "--- " ), _( "--- " )
};
// Same as layer_name_list, without space, not internationalized
static const wxString layer_name_list_for_filename[] = {
wxT( "Copper" ), wxT( "InnerL1" ), wxT( "InnerL2" ), wxT( "InnerL3" ),
@ -358,16 +358,16 @@ wxString ReturnPcbLayerName( int layer_number, bool omitSpacePadding )
wxT( "Drawings" ), wxT( "Comments" ), wxT( "Eco1" ), wxT( "Eco2" ),
wxT( "EdgesPcb" ), wxT( "---" ), wxT( "---" ), wxT( "---" )
};
if( (unsigned) layer_number >= 31u )
layer_number = 31;
return omitSpacePadding ?
return omitSpacePadding ?
layer_name_list_for_filename[layer_number] :
layer_name_list[layer_number];
#endif
}
@ -509,6 +509,6 @@ const wxString& valeur_param( int valeur, wxString& buf_texte )
{
buf_texte.Printf( wxT( "%2.4f \"" ), valeur * 0.0001 );
}
return buf_texte;
}

View File

@ -118,8 +118,8 @@ void WinEDA_App::InitEDA_Appl( const wxString& name )
/* Init kicad environment
* the environment variable KICAD (if exists) gives the kicad path:
* something like set KICAD=d:\kicad
*/
* something like set KICAD=d:\kicad
*/
m_Env_Defined = wxGetEnv( wxT( "KICAD" ), &m_KicadEnv );
if( m_Env_Defined ) // ensure m_KicadEnv ends by "/"
{
@ -214,7 +214,7 @@ bool WinEDA_App::SetBinDir()
if (str == NULL) return false;
char *native_str = NULL;
int len = CFStringGetMaximumSizeForEncoding(CFStringGetLength(str),
kCFStringEncodingUTF8) + 1;
kCFStringEncodingUTF8) + 1;
native_str = new char[len];
CFStringGetCString(str, native_str, len, kCFStringEncodingUTF8);
m_BinDir = CONV_FROM_UTF8(native_str);
@ -222,7 +222,7 @@ bool WinEDA_App::SetBinDir()
#elif defined(__UNIX__)
// Under Linux, if argv[0] doesn't the complete path to the executable,
// Under Linux, if argv[0] doesn't the complete path to the executable,
// it's necessary to obtain it using "which <filename>".
FILE* ftmp;
@ -270,7 +270,8 @@ void WinEDA_App::GetSettings()
wxString Line, Ident;
unsigned ii;
m_HelpSize.x = 500; m_HelpSize.y = 400;
m_HelpSize.x = 500;
m_HelpSize.y = 400;
if( m_EDA_CommonConfig )
{
@ -285,8 +286,11 @@ void WinEDA_App::GetSettings()
for( ii = 0; ii < 10; ii++ )
{
Ident = wxT( "LastProject" ); if( ii )
Ident = wxT( "LastProject" );
if( ii )
Ident << ii;
if( m_EDA_Config->Read( Ident, &Line ) )
m_LastProject.Add( Line );
}
@ -299,6 +303,7 @@ void WinEDA_App::GetSettings()
Line = m_EDA_Config->Read( wxT( "SdtFontType" ), wxEmptyString );
if( !Line.IsEmpty() )
g_StdFont->SetFaceName( Line );
ii = m_EDA_Config->Read( wxT( "SdtFontStyle" ), wxFONTFAMILY_ROMAN );
g_StdFont->SetStyle( ii );
ii = m_EDA_Config->Read( wxT( "SdtFontWeight" ), wxNORMAL );
@ -309,6 +314,7 @@ void WinEDA_App::GetSettings()
Line = m_EDA_Config->Read( wxT( "MsgFontType" ), wxEmptyString );
if( !Line.IsEmpty() )
g_MsgFont->SetFaceName( Line );
ii = m_EDA_Config->Read( wxT( "MsgFontStyle" ), wxFONTFAMILY_ROMAN );
g_MsgFont->SetStyle( ii );
ii = m_EDA_Config->Read( wxT( "MsgFontWeight" ), wxNORMAL );
@ -318,6 +324,7 @@ void WinEDA_App::GetSettings()
Line = m_EDA_Config->Read( wxT( "DialogFontType" ), wxEmptyString );
if( !Line.IsEmpty() )
g_DialogFont->SetFaceName( Line );
ii = m_EDA_Config->Read( wxT( "DialogFontStyle" ), wxFONTFAMILY_ROMAN );
g_DialogFont->SetStyle( ii );
ii = m_EDA_Config->Read( wxT( "DialogFontWeight" ), wxNORMAL );
@ -343,7 +350,6 @@ void WinEDA_App::SaveSettings()
{
unsigned int ii;
if( m_EDA_Config == NULL )
return;

View File

@ -1,6 +1,6 @@
/**************************************************/
/* projet_config : routines de trace du cartouche */
/**************************************************/
/**************************************************/
/* projet_config : routines de trace du cartouche */
/**************************************************/
#include "fctsys.h"
#include "gr_basic.h"
@ -13,341 +13,386 @@
/*********************************************************************/
static bool ReCreatePrjConfig(const wxString & local_config_filename,
const wxString & GroupName, bool ForceUseLocalConfig)
static bool ReCreatePrjConfig( const wxString& local_config_filename,
const wxString& GroupName, bool ForceUseLocalConfig )
/*********************************************************************/
/* Cree ou recree la configuration locale de kicad (filename.pro)
initialise:
g_Prj_Config
g_Prj_Config_LocalFilename
g_Prj_Default_Config_FullFilename
return:
TRUE si config locale
FALSE si default config
*/
* initialise:
* g_Prj_Config
* g_Prj_Config_LocalFilename
* g_Prj_Default_Config_FullFilename
* return:
* TRUE si config locale
* FALSE si default config
*/
{
// free old config
if ( g_Prj_Config ) delete g_Prj_Config;
g_Prj_Config = NULL;
// Init local Config filename
if ( local_config_filename.IsEmpty() ) g_Prj_Config_LocalFilename = wxT("kicad");
else g_Prj_Config_LocalFilename = local_config_filename;
// free old config
if( g_Prj_Config )
delete g_Prj_Config;
g_Prj_Config = NULL;
ChangeFileNameExt( g_Prj_Config_LocalFilename, g_Prj_Config_Filename_ext );
// Init local Config filename
if( local_config_filename.IsEmpty() )
g_Prj_Config_LocalFilename = wxT( "kicad" );
else
g_Prj_Config_LocalFilename = local_config_filename;
// Init local config filename
if ( ForceUseLocalConfig || wxFileExists(g_Prj_Config_LocalFilename) )
{
g_Prj_Default_Config_FullFilename.Empty();
g_Prj_Config = new wxFileConfig(wxEmptyString, wxEmptyString,
g_Prj_Config_LocalFilename, wxEmptyString,
wxCONFIG_USE_RELATIVE_PATH);
g_Prj_Config->DontCreateOnDemand();
ChangeFileNameExt( g_Prj_Config_LocalFilename, g_Prj_Config_Filename_ext );
if ( ForceUseLocalConfig ) return TRUE;
// Test de la bonne version du fichier (ou groupe) de configuration
int version = -1, def_version = 0;
g_Prj_Config->SetPath(GroupName);
version = g_Prj_Config->Read( wxT("version"), def_version);
g_Prj_Config->SetPath(UNIX_STRING_DIR_SEP);
if ( version > 0 ) return TRUE;
else delete g_Prj_Config; // Version incorrecte
}
// Init local config filename
if( ForceUseLocalConfig || wxFileExists( g_Prj_Config_LocalFilename ) )
{
g_Prj_Default_Config_FullFilename.Empty();
g_Prj_Config = new wxFileConfig( wxEmptyString, wxEmptyString,
g_Prj_Config_LocalFilename, wxEmptyString,
wxCONFIG_USE_RELATIVE_PATH );
g_Prj_Config->DontCreateOnDemand();
if( ForceUseLocalConfig )
return TRUE;
// Test de la bonne version du fichier (ou groupe) de configuration
int version = -1, def_version = 0;
g_Prj_Config->SetPath( GroupName );
version = g_Prj_Config->Read( wxT( "version" ), def_version );
g_Prj_Config->SetPath( UNIX_STRING_DIR_SEP );
if( version > 0 )
return TRUE;
else
delete g_Prj_Config; // Version incorrecte
}
// Fichier local non trouve ou invalide
g_Prj_Config_LocalFilename.Empty();
g_Prj_Default_Config_FullFilename =
ReturnKicadDatasPath() +
wxT("template/kicad") +
g_Prj_Config_Filename_ext;
// Recreate new config
g_Prj_Config = new wxFileConfig(wxEmptyString, wxEmptyString,
wxEmptyString, g_Prj_Default_Config_FullFilename,
wxCONFIG_USE_RELATIVE_PATH);
g_Prj_Config->DontCreateOnDemand();
// Fichier local non trouve ou invalide
g_Prj_Config_LocalFilename.Empty();
g_Prj_Default_Config_FullFilename =
ReturnKicadDatasPath() +
wxT( "template/kicad" ) +
g_Prj_Config_Filename_ext;
return FALSE;
// Recreate new config
g_Prj_Config = new wxFileConfig( wxEmptyString, wxEmptyString,
wxEmptyString, g_Prj_Default_Config_FullFilename,
wxCONFIG_USE_RELATIVE_PATH );
g_Prj_Config->DontCreateOnDemand();
return FALSE;
}
/***************************************************************************************/
void WinEDA_App::WriteProjectConfig(const wxString & local_config_filename,
const wxString & GroupName, PARAM_CFG_BASE ** List)
void WinEDA_App::WriteProjectConfig( const wxString& local_config_filename,
const wxString& GroupName, PARAM_CFG_BASE** List )
/***************************************************************************************/
/* enregistrement de la config "projet"*/
{
const PARAM_CFG_BASE * pt_cfg;
wxString msg;
ReCreatePrjConfig(local_config_filename, GroupName,
FORCE_LOCAL_CONFIG);
/* Write date ( surtout pour eviter bug de wxFileConfig
qui se trompe de rubrique si declaration [xx] en premiere ligne
(en fait si groupe vide) */
g_Prj_Config->SetPath(UNIX_STRING_DIR_SEP);
msg = DateAndTime();
g_Prj_Config->Write( wxT("update"), msg);
msg = GetAppName();
g_Prj_Config->Write( wxT("last_client"), msg);
const PARAM_CFG_BASE* pt_cfg;
wxString msg;
/* ecriture de la configuration */
g_Prj_Config->DeleteGroup(GroupName); // Erase all datas
g_Prj_Config->Flush();
ReCreatePrjConfig( local_config_filename, GroupName,
FORCE_LOCAL_CONFIG );
g_Prj_Config->SetPath(GroupName);
g_Prj_Config->Write( wxT("version"), CONFIG_VERSION);
g_Prj_Config->SetPath(UNIX_STRING_DIR_SEP);
/* Write date ( surtout pour eviter bug de wxFileConfig
* qui se trompe de rubrique si declaration [xx] en premiere ligne
* (en fait si groupe vide) */
g_Prj_Config->SetPath( UNIX_STRING_DIR_SEP );
msg = DateAndTime();
for( ; *List != NULL ; List++)
{
pt_cfg = *List;
if ( pt_cfg->m_Group ) g_Prj_Config->SetPath(pt_cfg->m_Group);
else g_Prj_Config->SetPath(GroupName);
g_Prj_Config->Write( wxT( "update" ), msg );
msg = GetAppName();
switch( pt_cfg->m_Type )
{
case PARAM_INT:
#undef PTCFG
#define PTCFG ((PARAM_CFG_INT *)pt_cfg)
if (PTCFG->m_Pt_param == NULL) break;
if ( pt_cfg->m_Setup)
m_EDA_Config->Write(pt_cfg->m_Ident, *PTCFG->m_Pt_param);
else
g_Prj_Config->Write(pt_cfg->m_Ident, *PTCFG->m_Pt_param);
break;
g_Prj_Config->Write( wxT( "last_client" ), msg );
case PARAM_SETCOLOR:
#undef PTCFG
#define PTCFG ((PARAM_CFG_SETCOLOR *)pt_cfg)
if (PTCFG->m_Pt_param == NULL) break;
if ( pt_cfg->m_Setup)
m_EDA_Config->Write(pt_cfg->m_Ident, *PTCFG->m_Pt_param);
else
g_Prj_Config->Write(pt_cfg->m_Ident, *PTCFG->m_Pt_param);
break;
/* ecriture de la configuration */
g_Prj_Config->DeleteGroup( GroupName ); // Erase all datas
g_Prj_Config->Flush();
case PARAM_DOUBLE:
#undef PTCFG
#define PTCFG ((PARAM_CFG_DOUBLE *)pt_cfg)
if (PTCFG->m_Pt_param == NULL) break;
if ( pt_cfg->m_Setup)
m_EDA_Config->Write(pt_cfg->m_Ident, *PTCFG->m_Pt_param);
else
g_Prj_Config->Write(pt_cfg->m_Ident, *PTCFG->m_Pt_param);
break;
g_Prj_Config->SetPath( GroupName );
g_Prj_Config->Write( wxT( "version" ), CONFIG_VERSION );
g_Prj_Config->SetPath( UNIX_STRING_DIR_SEP );
case PARAM_BOOL:
#undef PTCFG
#define PTCFG ((PARAM_CFG_BOOL *)pt_cfg)
if (PTCFG->m_Pt_param == NULL) break;
if ( pt_cfg->m_Setup)
m_EDA_Config->Write(pt_cfg->m_Ident, (int)*PTCFG->m_Pt_param);
else
g_Prj_Config->Write(pt_cfg->m_Ident, (int)*PTCFG->m_Pt_param);
break;
for( ; *List != NULL; List++ )
{
pt_cfg = *List;
if( pt_cfg->m_Group )
g_Prj_Config->SetPath( pt_cfg->m_Group );
else
g_Prj_Config->SetPath( GroupName );
case PARAM_WXSTRING:
#undef PTCFG
#define PTCFG ((PARAM_CFG_WXSTRING *)pt_cfg)
if (PTCFG->m_Pt_param == NULL) break;
if ( pt_cfg->m_Setup)
m_EDA_Config->Write(pt_cfg->m_Ident, *PTCFG->m_Pt_param);
else
g_Prj_Config->Write(pt_cfg->m_Ident, *PTCFG->m_Pt_param);
break;
switch( pt_cfg->m_Type )
{
case PARAM_INT:
#undef PTCFG
#define PTCFG ( (PARAM_CFG_INT*) pt_cfg )
if( PTCFG->m_Pt_param == NULL )
break;
case PARAM_LIBNAME_LIST:
{
#undef PTCFG
#define PTCFG ((PARAM_CFG_LIBNAME_LIST *)pt_cfg)
if (PTCFG->m_Pt_param == NULL) break;
wxArrayString * libname_list = PTCFG->m_Pt_param;
if ( libname_list == NULL ) break;
unsigned indexlib = 0;
wxString cle_config;
for ( ; indexlib < libname_list->GetCount(); indexlib++ )
{
cle_config = pt_cfg->m_Ident;
// We use indexlib+1 because first lib name is LibName1
cle_config << (indexlib+1);
g_Prj_Config->Write(cle_config, libname_list->Item(indexlib));
}
break;
}
case PARAM_COMMAND_ERASE: // Erase all datas
if ( pt_cfg->m_Ident )
{
m_EDA_Config->DeleteGroup(pt_cfg->m_Ident);
g_Prj_Config->DeleteGroup(pt_cfg->m_Ident);
}
break;
}
}
g_Prj_Config->SetPath(UNIX_STRING_DIR_SEP);
delete g_Prj_Config;
g_Prj_Config = NULL;
if( pt_cfg->m_Setup )
m_EDA_Config->Write( pt_cfg->m_Ident, *PTCFG->m_Pt_param );
else
g_Prj_Config->Write( pt_cfg->m_Ident, *PTCFG->m_Pt_param );
break;
case PARAM_SETCOLOR:
#undef PTCFG
#define PTCFG ( (PARAM_CFG_SETCOLOR*) pt_cfg )
if( PTCFG->m_Pt_param == NULL )
break;
if( pt_cfg->m_Setup )
m_EDA_Config->Write( pt_cfg->m_Ident, *PTCFG->m_Pt_param );
else
g_Prj_Config->Write( pt_cfg->m_Ident, *PTCFG->m_Pt_param );
break;
case PARAM_DOUBLE:
#undef PTCFG
#define PTCFG ( (PARAM_CFG_DOUBLE*) pt_cfg )
if( PTCFG->m_Pt_param == NULL )
break;
if( pt_cfg->m_Setup )
m_EDA_Config->Write( pt_cfg->m_Ident, *PTCFG->m_Pt_param );
else
g_Prj_Config->Write( pt_cfg->m_Ident, *PTCFG->m_Pt_param );
break;
case PARAM_BOOL:
#undef PTCFG
#define PTCFG ( (PARAM_CFG_BOOL*) pt_cfg )
if( PTCFG->m_Pt_param == NULL )
break;
if( pt_cfg->m_Setup )
m_EDA_Config->Write( pt_cfg->m_Ident, (int) *PTCFG->m_Pt_param );
else
g_Prj_Config->Write( pt_cfg->m_Ident, (int) *PTCFG->m_Pt_param );
break;
case PARAM_WXSTRING:
#undef PTCFG
#define PTCFG ( (PARAM_CFG_WXSTRING*) pt_cfg )
if( PTCFG->m_Pt_param == NULL )
break;
if( pt_cfg->m_Setup )
m_EDA_Config->Write( pt_cfg->m_Ident, *PTCFG->m_Pt_param );
else
g_Prj_Config->Write( pt_cfg->m_Ident, *PTCFG->m_Pt_param );
break;
case PARAM_LIBNAME_LIST:
{
#undef PTCFG
#define PTCFG ( (PARAM_CFG_LIBNAME_LIST*) pt_cfg )
if( PTCFG->m_Pt_param == NULL )
break;
wxArrayString* libname_list = PTCFG->m_Pt_param;
if( libname_list == NULL )
break;
unsigned indexlib = 0;
wxString cle_config;
for( ; indexlib < libname_list->GetCount(); indexlib++ )
{
cle_config = pt_cfg->m_Ident;
// We use indexlib+1 because first lib name is LibName1
cle_config << (indexlib + 1);
g_Prj_Config->Write( cle_config, libname_list->Item( indexlib ) );
}
break;
}
case PARAM_COMMAND_ERASE: // Erase all datas
if( pt_cfg->m_Ident )
{
m_EDA_Config->DeleteGroup( pt_cfg->m_Ident );
g_Prj_Config->DeleteGroup( pt_cfg->m_Ident );
}
break;
}
}
g_Prj_Config->SetPath( UNIX_STRING_DIR_SEP );
delete g_Prj_Config;
g_Prj_Config = NULL;
}
/***************************************************************************************/
bool WinEDA_App::ReadProjectConfig(const wxString & local_config_filename,
const wxString & GroupName, PARAM_CFG_BASE ** List,
bool Load_Only_if_New)
bool WinEDA_App::ReadProjectConfig( const wxString& local_config_filename,
const wxString& GroupName, PARAM_CFG_BASE** List,
bool Load_Only_if_New )
/***************************************************************************************/
/* Lecture de la config "projet"
*** si Load_Only_if_New == TRUE, elle n'est lue que si elle
*** est differente de la config actuelle (dates differentes)
return:
TRUE si lue.
Met a jour en plus:
g_EDA_Appl->m_CurrentOptionFileDateAndTime
g_EDA_Appl->m_CurrentOptionFile
*/
*** si Load_Only_if_New == TRUE, elle n'est lue que si elle
*** est differente de la config actuelle (dates differentes)
*
* return:
* TRUE si lue.
* Met a jour en plus:
* g_EDA_Appl->m_CurrentOptionFileDateAndTime
* g_EDA_Appl->m_CurrentOptionFile
*/
{
const PARAM_CFG_BASE * pt_cfg;
wxString timestamp;
if ( List == NULL )return FALSE;
const PARAM_CFG_BASE* pt_cfg;
wxString timestamp;
ReCreatePrjConfig(local_config_filename, GroupName, FALSE);
if( List == NULL )
return FALSE;
g_Prj_Config->SetPath(UNIX_STRING_DIR_SEP);
timestamp = g_Prj_Config->Read( wxT("update") );
if ( Load_Only_if_New && ( !timestamp.IsEmpty() ) &&
(timestamp == g_EDA_Appl->m_CurrentOptionFileDateAndTime) )
{
return FALSE;
}
g_EDA_Appl->m_CurrentOptionFileDateAndTime = timestamp;
if ( ! g_Prj_Default_Config_FullFilename.IsEmpty() )
g_EDA_Appl->m_CurrentOptionFile = g_Prj_Default_Config_FullFilename;
else
{
if ( wxPathOnly(g_Prj_Config_LocalFilename).IsEmpty() )
g_EDA_Appl->m_CurrentOptionFile =
wxGetCwd() + STRING_DIR_SEP + g_Prj_Config_LocalFilename;
else
g_EDA_Appl->m_CurrentOptionFile = g_Prj_Config_LocalFilename;
}
ReCreatePrjConfig( local_config_filename, GroupName, FALSE );
for( ; *List != NULL ; List++)
{
pt_cfg = *List;
if ( pt_cfg->m_Group ) g_Prj_Config->SetPath(pt_cfg->m_Group);
else g_Prj_Config->SetPath(GroupName);
switch( pt_cfg->m_Type )
{
case PARAM_INT:
{
#undef PTCFG
#define PTCFG ((PARAM_CFG_INT *)pt_cfg)
int itmp;
if ( pt_cfg->m_Setup)
itmp = m_EDA_Config->Read(pt_cfg->m_Ident, PTCFG->m_Default );
else
itmp = g_Prj_Config->Read(pt_cfg->m_Ident, PTCFG->m_Default );
if( (itmp < PTCFG->m_Min) || (itmp > PTCFG->m_Max) )
itmp = PTCFG->m_Default;
*PTCFG->m_Pt_param = itmp;
break;
}
case PARAM_SETCOLOR:
{
#undef PTCFG
#define PTCFG ((PARAM_CFG_SETCOLOR *)pt_cfg)
int itmp;
if ( pt_cfg->m_Setup)
itmp = m_EDA_Config->Read(pt_cfg->m_Ident, PTCFG->m_Default );
else
itmp = g_Prj_Config->Read(pt_cfg->m_Ident, PTCFG->m_Default );
if( (itmp < 0) || (itmp > MAX_COLOR) )
itmp = PTCFG->m_Default;
*PTCFG->m_Pt_param = itmp;
break;
}
case PARAM_DOUBLE:
{
#undef PTCFG
#define PTCFG ((PARAM_CFG_DOUBLE *)pt_cfg)
double ftmp = 0; wxString msg;
if ( pt_cfg->m_Setup)
msg = m_EDA_Config->Read(pt_cfg->m_Ident, wxT("") );
else
msg = g_Prj_Config->Read(pt_cfg->m_Ident, wxT("") );
if ( msg.IsEmpty() ) ftmp = PTCFG->m_Default;
else
{
msg.ToDouble(&ftmp);
if( (ftmp < PTCFG->m_Min) || (ftmp > PTCFG->m_Max) )
ftmp = PTCFG->m_Default;
}
*PTCFG->m_Pt_param = ftmp;
break;
}
case PARAM_BOOL:
{
#undef PTCFG
#define PTCFG ((PARAM_CFG_BOOL *)pt_cfg)
int itmp;
if ( pt_cfg->m_Setup)
itmp = m_EDA_Config->Read(pt_cfg->m_Ident, PTCFG->m_Default );
else
itmp = g_Prj_Config->Read(pt_cfg->m_Ident, PTCFG->m_Default );
*PTCFG->m_Pt_param = itmp ? TRUE : FALSE;
break;
}
case PARAM_WXSTRING:
{
#undef PTCFG
#define PTCFG ((PARAM_CFG_WXSTRING *)pt_cfg)
if (PTCFG->m_Pt_param == NULL) break;
if ( pt_cfg->m_Setup)
*PTCFG->m_Pt_param = m_EDA_Config->Read(pt_cfg->m_Ident );
else
*PTCFG->m_Pt_param = g_Prj_Config->Read(pt_cfg->m_Ident );
break;
}
g_Prj_Config->SetPath( UNIX_STRING_DIR_SEP );
timestamp = g_Prj_Config->Read( wxT( "update" ) );
if( Load_Only_if_New && ( !timestamp.IsEmpty() )
&& (timestamp == g_EDA_Appl->m_CurrentOptionFileDateAndTime) )
{
return FALSE;
}
case PARAM_LIBNAME_LIST:
{
#undef PTCFG
#define PTCFG ((PARAM_CFG_LIBNAME_LIST *)pt_cfg)
int indexlib = 1; // We start indexlib to 1 because first lib name is LibName1
wxString libname, id_lib;
wxArrayString * libname_list = PTCFG->m_Pt_param;
while ( 1 )
{
id_lib = pt_cfg->m_Ident; id_lib << indexlib; indexlib++;
libname = g_Prj_Config->Read(id_lib, wxT("") );
if( libname.IsEmpty() ) break;
libname_list->Add(libname);
}
break;
}
case PARAM_COMMAND_ERASE:
break;
}
}
delete g_Prj_Config;
g_Prj_Config = NULL;
return TRUE;
g_EDA_Appl->m_CurrentOptionFileDateAndTime = timestamp;
if( !g_Prj_Default_Config_FullFilename.IsEmpty() )
g_EDA_Appl->m_CurrentOptionFile = g_Prj_Default_Config_FullFilename;
else
{
if( wxPathOnly( g_Prj_Config_LocalFilename ).IsEmpty() )
g_EDA_Appl->m_CurrentOptionFile =
wxGetCwd() + STRING_DIR_SEP + g_Prj_Config_LocalFilename;
else
g_EDA_Appl->m_CurrentOptionFile = g_Prj_Config_LocalFilename;
}
for( ; *List != NULL; List++ )
{
pt_cfg = *List;
if( pt_cfg->m_Group )
g_Prj_Config->SetPath( pt_cfg->m_Group );
else
g_Prj_Config->SetPath( GroupName );
switch( pt_cfg->m_Type )
{
case PARAM_INT:
{
#undef PTCFG
#define PTCFG ( (PARAM_CFG_INT*) pt_cfg )
int itmp;
if( pt_cfg->m_Setup )
itmp = m_EDA_Config->Read( pt_cfg->m_Ident, PTCFG->m_Default );
else
itmp = g_Prj_Config->Read( pt_cfg->m_Ident, PTCFG->m_Default );
if( (itmp < PTCFG->m_Min) || (itmp > PTCFG->m_Max) )
itmp = PTCFG->m_Default;
*PTCFG->m_Pt_param = itmp;
break;
}
case PARAM_SETCOLOR:
{
#undef PTCFG
#define PTCFG ( (PARAM_CFG_SETCOLOR*) pt_cfg )
int itmp;
if( pt_cfg->m_Setup )
itmp = m_EDA_Config->Read( pt_cfg->m_Ident, PTCFG->m_Default );
else
itmp = g_Prj_Config->Read( pt_cfg->m_Ident, PTCFG->m_Default );
if( (itmp < 0) || (itmp > MAX_COLOR) )
itmp = PTCFG->m_Default;
*PTCFG->m_Pt_param = itmp;
break;
}
case PARAM_DOUBLE:
{
#undef PTCFG
#define PTCFG ( (PARAM_CFG_DOUBLE*) pt_cfg )
double ftmp = 0; wxString msg;
if( pt_cfg->m_Setup )
msg = m_EDA_Config->Read( pt_cfg->m_Ident, wxT( "" ) );
else
msg = g_Prj_Config->Read( pt_cfg->m_Ident, wxT( "" ) );
if( msg.IsEmpty() )
ftmp = PTCFG->m_Default;
else
{
msg.ToDouble( &ftmp );
if( (ftmp < PTCFG->m_Min) || (ftmp > PTCFG->m_Max) )
ftmp = PTCFG->m_Default;
}
*PTCFG->m_Pt_param = ftmp;
break;
}
case PARAM_BOOL:
{
#undef PTCFG
#define PTCFG ( (PARAM_CFG_BOOL*) pt_cfg )
int itmp;
if( pt_cfg->m_Setup )
itmp = m_EDA_Config->Read( pt_cfg->m_Ident, PTCFG->m_Default );
else
itmp = g_Prj_Config->Read( pt_cfg->m_Ident, PTCFG->m_Default );
*PTCFG->m_Pt_param = itmp ? TRUE : FALSE;
break;
}
case PARAM_WXSTRING:
{
#undef PTCFG
#define PTCFG ( (PARAM_CFG_WXSTRING*) pt_cfg )
if( PTCFG->m_Pt_param == NULL )
break;
if( pt_cfg->m_Setup )
*PTCFG->m_Pt_param = m_EDA_Config->Read( pt_cfg->m_Ident );
else
*PTCFG->m_Pt_param = g_Prj_Config->Read( pt_cfg->m_Ident );
break;
}
case PARAM_LIBNAME_LIST:
{
#undef PTCFG
#define PTCFG ( (PARAM_CFG_LIBNAME_LIST*) pt_cfg )
int indexlib = 1; // We start indexlib to 1 because first lib name is LibName1
wxString libname, id_lib;
wxArrayString* libname_list = PTCFG->m_Pt_param;
while( 1 )
{
id_lib = pt_cfg->m_Ident; id_lib << indexlib; indexlib++;
libname = g_Prj_Config->Read( id_lib, wxT( "" ) );
if( libname.IsEmpty() )
break;
libname_list->Add( libname );
}
break;
}
case PARAM_COMMAND_ERASE:
break;
}
}
delete g_Prj_Config;
g_Prj_Config = NULL;
return TRUE;
}
@ -355,114 +400,124 @@ wxString timestamp;
/* Constructeurs des descripteurs de structs de configuration */
/**************************************************************/
PARAM_CFG_BASE::PARAM_CFG_BASE(const wxChar * ident, const paramcfg_id type,
const wxChar * group)
PARAM_CFG_BASE::PARAM_CFG_BASE( const wxChar* ident, const paramcfg_id type,
const wxChar* group )
{
m_Ident = ident;
m_Type = type;
m_Group = group;
m_Setup = FALSE;
m_Ident = ident;
m_Type = type;
m_Group = group;
m_Setup = FALSE;
}
PARAM_CFG_INT::PARAM_CFG_INT(const wxChar * ident, int * ptparam,
int default_val, int min, int max,
const wxChar * group)
: PARAM_CFG_BASE(ident, PARAM_INT, group)
PARAM_CFG_INT::PARAM_CFG_INT( const wxChar* ident, int* ptparam,
int default_val, int min, int max,
const wxChar* group ) :
PARAM_CFG_BASE( ident, PARAM_INT, group )
{
m_Pt_param = ptparam;
m_Default = default_val;
m_Min = min;
m_Max = max;
m_Pt_param = ptparam;
m_Default = default_val;
m_Min = min;
m_Max = max;
}
PARAM_CFG_INT::PARAM_CFG_INT(bool Insetup, const wxChar * ident, int * ptparam,
int default_val, int min, int max,
const wxChar * group)
: PARAM_CFG_BASE(ident, PARAM_INT, group)
PARAM_CFG_INT::PARAM_CFG_INT( bool Insetup, const wxChar* ident, int* ptparam,
int default_val, int min, int max,
const wxChar* group ) :
PARAM_CFG_BASE( ident, PARAM_INT, group )
{
m_Pt_param = ptparam;
m_Default = default_val;
m_Min = min;
m_Max = max;
m_Setup = Insetup;
m_Pt_param = ptparam;
m_Default = default_val;
m_Min = min;
m_Max = max;
m_Setup = Insetup;
}
PARAM_CFG_SETCOLOR::PARAM_CFG_SETCOLOR(const wxChar * ident, int * ptparam,
int default_val, const wxChar * group)
: PARAM_CFG_BASE(ident, PARAM_SETCOLOR, group)
PARAM_CFG_SETCOLOR::PARAM_CFG_SETCOLOR( const wxChar* ident, int* ptparam,
int default_val, const wxChar* group ) :
PARAM_CFG_BASE( ident, PARAM_SETCOLOR, group )
{
m_Pt_param = ptparam;
m_Default = default_val;
m_Pt_param = ptparam;
m_Default = default_val;
}
PARAM_CFG_SETCOLOR::PARAM_CFG_SETCOLOR(bool Insetup, const wxChar * ident, int * ptparam,
int default_val, const wxChar * group)
: PARAM_CFG_BASE(ident, PARAM_SETCOLOR, group)
PARAM_CFG_SETCOLOR::PARAM_CFG_SETCOLOR( bool Insetup, const wxChar* ident, int* ptparam,
int default_val, const wxChar* group ) :
PARAM_CFG_BASE( ident, PARAM_SETCOLOR, group )
{
m_Pt_param = ptparam;
m_Default = default_val;
m_Setup = Insetup;
m_Pt_param = ptparam;
m_Default = default_val;
m_Setup = Insetup;
}
PARAM_CFG_DOUBLE::PARAM_CFG_DOUBLE(const wxChar * ident, double * ptparam,
double default_val, double min , double max,
const wxChar * group)
: PARAM_CFG_BASE(ident, PARAM_DOUBLE, group)
PARAM_CFG_DOUBLE::PARAM_CFG_DOUBLE( const wxChar* ident, double* ptparam,
double default_val, double min, double max,
const wxChar* group ) :
PARAM_CFG_BASE( ident, PARAM_DOUBLE, group )
{
m_Pt_param = ptparam;
m_Default = default_val;
m_Min = min;
m_Max = max;
}
PARAM_CFG_DOUBLE::PARAM_CFG_DOUBLE(bool Insetup, const wxChar * ident, double * ptparam,
double default_val, double min , double max,
const wxChar * group)
: PARAM_CFG_BASE(ident, PARAM_DOUBLE, group)
{
m_Pt_param = ptparam;
m_Default = default_val;
m_Min = min;
m_Max = max;
m_Setup = Insetup;
m_Pt_param = ptparam;
m_Default = default_val;
m_Min = min;
m_Max = max;
}
PARAM_CFG_BOOL::PARAM_CFG_BOOL(const wxChar * ident, bool * ptparam,
int default_val, const wxChar * group)
: PARAM_CFG_BASE(ident, PARAM_BOOL, group)
PARAM_CFG_DOUBLE::PARAM_CFG_DOUBLE( bool Insetup, const wxChar* ident, double* ptparam,
double default_val, double min, double max,
const wxChar* group ) :
PARAM_CFG_BASE( ident, PARAM_DOUBLE, group )
{
m_Pt_param = ptparam;
m_Default = default_val ? TRUE : FALSE;
m_Pt_param = ptparam;
m_Default = default_val;
m_Min = min;
m_Max = max;
m_Setup = Insetup;
}
PARAM_CFG_BOOL::PARAM_CFG_BOOL(bool Insetup, const wxChar * ident, bool * ptparam,
int default_val, const wxChar * group)
: PARAM_CFG_BASE(ident, PARAM_BOOL, group)
PARAM_CFG_BOOL::PARAM_CFG_BOOL( const wxChar* ident, bool* ptparam,
int default_val, const wxChar* group ) :
PARAM_CFG_BASE( ident, PARAM_BOOL, group )
{
m_Pt_param = ptparam;
m_Default = default_val ? TRUE : FALSE;
m_Setup = Insetup;
m_Pt_param = ptparam;
m_Default = default_val ? TRUE : FALSE;
}
PARAM_CFG_WXSTRING::PARAM_CFG_WXSTRING(const wxChar * ident,
wxString * ptparam, const wxChar * group)
: PARAM_CFG_BASE(ident, PARAM_WXSTRING, group)
PARAM_CFG_BOOL::PARAM_CFG_BOOL( bool Insetup, const wxChar* ident, bool* ptparam,
int default_val, const wxChar* group ) :
PARAM_CFG_BASE( ident, PARAM_BOOL, group )
{
m_Pt_param = ptparam;
m_Pt_param = ptparam;
m_Default = default_val ? TRUE : FALSE;
m_Setup = Insetup;
}
PARAM_CFG_WXSTRING::PARAM_CFG_WXSTRING(bool Insetup, const wxChar * ident,
wxString * ptparam, const wxChar * group)
: PARAM_CFG_BASE(ident, PARAM_WXSTRING, group)
PARAM_CFG_WXSTRING::PARAM_CFG_WXSTRING( const wxChar* ident,
wxString* ptparam, const wxChar* group ) :
PARAM_CFG_BASE( ident, PARAM_WXSTRING, group )
{
m_Pt_param = ptparam;
m_Setup = Insetup;
m_Pt_param = ptparam;
}
PARAM_CFG_LIBNAME_LIST::PARAM_CFG_LIBNAME_LIST(const wxChar * ident,
wxArrayString * ptparam, const wxChar * group)
: PARAM_CFG_BASE(ident, PARAM_LIBNAME_LIST, group)
PARAM_CFG_WXSTRING::PARAM_CFG_WXSTRING( bool Insetup, const wxChar* ident,
wxString* ptparam, const wxChar* group ) :
PARAM_CFG_BASE( ident, PARAM_WXSTRING, group )
{
m_Pt_param = ptparam;
m_Pt_param = ptparam;
m_Setup = Insetup;
}
PARAM_CFG_LIBNAME_LIST::PARAM_CFG_LIBNAME_LIST( const wxChar* ident,
wxArrayString* ptparam, const wxChar* group ) :
PARAM_CFG_BASE( ident, PARAM_LIBNAME_LIST, group )
{
m_Pt_param = ptparam;
}

View File

@ -1,6 +1,6 @@
/***********************************/
/** pcbcfg() : configuration **/
/***********************************/
/***********************************/
/** pcbcfg() : configuration **/
/***********************************/
/* lit ou met a jour la configuration de PCBNEW */
@ -21,193 +21,200 @@
/* Variables locales */
#define HOTKEY_FILENAME wxT("pcbnew")
#define HOTKEY_FILENAME wxT( "pcbnew" )
/***********************************************************/
void WinEDA_PcbFrame::Process_Config(wxCommandEvent& event)
void WinEDA_PcbFrame::Process_Config( wxCommandEvent& event )
/***********************************************************/
{
int id = event.GetId();
wxPoint pos;
wxClientDC dc(DrawPanel);
wxString FullFileName;
int id = event.GetId();
wxPoint pos;
DrawPanel->PrepareGraphicContext(&dc);
wxClientDC dc( DrawPanel );
pos = GetPosition();
pos.x += 20; pos.y += 20;
wxString FullFileName;
switch( id )
{
case ID_COLORS_SETUP :
DisplayColorSetupFrame(this, pos);
break;
DrawPanel->PrepareGraphicContext( &dc );
case ID_CONFIG_REQ : // Creation de la fenetre de configuration
InstallConfigFrame(pos);
break;
pos = GetPosition();
pos.x += 20;
pos.y += 20;
case ID_PCB_TRACK_SIZE_SETUP:
case ID_PCB_LOOK_SETUP:
case ID_OPTIONS_SETUP:
case ID_PCB_DRAWINGS_WIDTHS_SETUP:
InstallPcbOptionsFrame(pos, &dc, id);
break;
switch( id )
{
case ID_COLORS_SETUP:
DisplayColorSetupFrame( this, pos );
break;
case ID_PCB_PAD_SETUP:
InstallPadOptionsFrame( NULL, NULL, pos);
break;
case ID_CONFIG_REQ: // Creation de la fenetre de configuration
InstallConfigFrame( pos );
break;
case ID_CONFIG_SAVE:
Update_config(this);
break;
case ID_PCB_TRACK_SIZE_SETUP:
case ID_PCB_LOOK_SETUP:
case ID_OPTIONS_SETUP:
case ID_PCB_DRAWINGS_WIDTHS_SETUP:
InstallPcbOptionsFrame( pos, &dc, id );
break;
case ID_CONFIG_READ:
FullFileName = GetScreen()->m_FileName.AfterLast('/');
ChangeFileNameExt(FullFileName, g_Prj_Config_Filename_ext);
FullFileName = EDA_FileSelector(_("Read config file"),
wxPathOnly(GetScreen()->m_FileName),/* Chemin par defaut */
FullFileName, /* nom fichier par defaut */
g_Prj_Config_Filename_ext, /* extension par defaut */
FullFileName, /* Masque d'affichage */
this,
wxFD_OPEN,
TRUE /* ne change pas de repertoire courant */
);
if ( FullFileName.IsEmpty()) break;
if ( ! wxFileExists(FullFileName) )
{
wxString msg;
msg.Printf(_("File %s not found"), FullFileName.GetData());
DisplayError(this, msg); break;
}
Read_Config(FullFileName );
break;
case ID_PCB_PAD_SETUP:
InstallPadOptionsFrame( NULL, NULL, pos );
break;
case ID_PREFERENCES_CREATE_CONFIG_HOTKEYS:
FullFileName = ReturnHotkeyConfigFilePath( g_ConfigFileLocationChoice );
FullFileName += HOTKEY_FILENAME;
FullFileName += DEFAULT_HOTKEY_FILENAME_EXT;
WriteHotkeyConfigFile(FullFileName, s_Pcbnew_Editor_Hokeys_Descr, true);
break;
case ID_CONFIG_SAVE:
Update_config( this );
break;
case ID_PREFERENCES_READ_CONFIG_HOTKEYS:
Read_Hotkey_Config( this, true);
break;
case ID_CONFIG_READ:
FullFileName = GetScreen()->m_FileName.AfterLast( '/' );
ChangeFileNameExt( FullFileName, g_Prj_Config_Filename_ext );
FullFileName = EDA_FileSelector( _( "Read config file" ),
wxPathOnly( GetScreen()->m_FileName ), /* Chemin par defaut */
FullFileName, /* nom fichier par defaut */
g_Prj_Config_Filename_ext, /* extension par defaut */
FullFileName, /* Masque d'affichage */
this,
wxFD_OPEN,
TRUE /* ne change pas de repertoire courant */
);
if( FullFileName.IsEmpty() )
break;
if( !wxFileExists( FullFileName ) )
{
wxString msg;
msg.Printf( _( "File %s not found" ), FullFileName.GetData() );
DisplayError( this, msg ); break;
}
Read_Config( FullFileName );
break;
case ID_PREFERENCES_EDIT_CONFIG_HOTKEYS:
{
FullFileName = ReturnHotkeyConfigFilePath( g_ConfigFileLocationChoice );
FullFileName += HOTKEY_FILENAME;
FullFileName += DEFAULT_HOTKEY_FILENAME_EXT;
wxString editorname = GetEditorName();
if ( !editorname.IsEmpty() )
ExecuteFile(this, editorname, FullFileName);
break;
}
case ID_PREFERENCES_CREATE_CONFIG_HOTKEYS:
FullFileName = ReturnHotkeyConfigFilePath( g_ConfigFileLocationChoice );
FullFileName += HOTKEY_FILENAME;
FullFileName += DEFAULT_HOTKEY_FILENAME_EXT;
WriteHotkeyConfigFile( FullFileName, s_Pcbnew_Editor_Hokeys_Descr, true );
break;
case ID_PREFERENCES_HOTKEY_PATH_IS_HOME:
case ID_PREFERENCES_HOTKEY_PATH_IS_KICAD:
HandleHotkeyConfigMenuSelection( this, id );
break;
case ID_PREFERENCES_READ_CONFIG_HOTKEYS:
Read_Hotkey_Config( this, true );
break;
case ID_PREFERENCES_HOTKEY_SHOW_CURRENT_LIST: // Display Current hotkey list for eeschema
DisplayHotkeyList( this, s_Board_Editor_Hokeys_Descr );
break;
case ID_PREFERENCES_EDIT_CONFIG_HOTKEYS:
{
FullFileName = ReturnHotkeyConfigFilePath( g_ConfigFileLocationChoice );
FullFileName += HOTKEY_FILENAME;
FullFileName += DEFAULT_HOTKEY_FILENAME_EXT;
wxString editorname = GetEditorName();
if( !editorname.IsEmpty() )
ExecuteFile( this, editorname, FullFileName );
break;
}
default:
DisplayError(this, wxT("WinEDA_PcbFrame::Process_Config internal error"));
}
case ID_PREFERENCES_HOTKEY_PATH_IS_HOME:
case ID_PREFERENCES_HOTKEY_PATH_IS_KICAD:
HandleHotkeyConfigMenuSelection( this, id );
break;
case ID_PREFERENCES_HOTKEY_SHOW_CURRENT_LIST: // Display Current hotkey list for eeschema
DisplayHotkeyList( this, s_Board_Editor_Hokeys_Descr );
break;
default:
DisplayError( this, wxT( "WinEDA_PcbFrame::Process_Config internal error" ) );
}
}
/***************************************************************/
bool Read_Hotkey_Config( WinEDA_DrawFrame * frame, bool verbose )
bool Read_Hotkey_Config( WinEDA_DrawFrame* frame, bool verbose )
/***************************************************************/
/*
* Read the hotkey files config for pcbnew and module_edit
*/
*/
{
wxString FullFileName = ReturnHotkeyConfigFilePath( g_ConfigFileLocationChoice );
FullFileName += HOTKEY_FILENAME;
FullFileName += DEFAULT_HOTKEY_FILENAME_EXT;
return frame->ReadHotkeyConfigFile(FullFileName, s_Pcbnew_Editor_Hokeys_Descr, verbose);
wxString FullFileName = ReturnHotkeyConfigFilePath( g_ConfigFileLocationChoice );
FullFileName += HOTKEY_FILENAME;
FullFileName += DEFAULT_HOTKEY_FILENAME_EXT;
return frame->ReadHotkeyConfigFile( FullFileName, s_Pcbnew_Editor_Hokeys_Descr, verbose );
}
/**************************************************************************/
bool Read_Config(const wxString & project_name)
bool Read_Config( const wxString& project_name )
/*************************************************************************/
/* lit la configuration, si elle n'a pas deja ete lue
1 - lit <nom fichier brd>.pro
2 - si non trouve lit <chemin de *.exe>/kicad.pro
3 - si non trouve: init des variables aux valeurs par defaut
Retourne TRUE si lu, FALSE si config non lue ou non modifiée
*/
* 1 - lit <nom fichier brd>.pro
* 2 - si non trouve lit <chemin de *.exe>/kicad.pro
* 3 - si non trouve: init des variables aux valeurs par defaut
*
* Retourne TRUE si lu, FALSE si config non lue ou non modifiée
*/
{
wxString FullFileName;
int ii;
wxString FullFileName;
int ii;
g_Prj_Config_Filename_ext = wxT(".pro");
FullFileName = project_name;
ChangeFileNameExt(FullFileName, g_Prj_Config_Filename_ext);
g_Prj_Config_Filename_ext = wxT( ".pro" );
FullFileName = project_name;
ChangeFileNameExt( FullFileName, g_Prj_Config_Filename_ext );
/* Init des valeurs par defaut */
g_LibName_List.Clear();
/* Init des valeurs par defaut */
g_LibName_List.Clear();
g_EDA_Appl->ReadProjectConfig( FullFileName,
GROUP, ParamCfgList, FALSE);
g_EDA_Appl->ReadProjectConfig( FullFileName,
GROUP, ParamCfgList, FALSE );
/* Traitement des variables particulieres: */
/* Traitement des variables particulieres: */
SetRealLibraryPath( wxT("modules") );
SetRealLibraryPath( wxT( "modules" ) );
if (ScreenPcb)
{
ScreenPcb->m_Diviseur_Grille = Pcbdiv_grille;
ScreenPcb->m_UserGrid = g_UserGrid;
ScreenPcb->m_UserGridUnit = g_UserGrid_Unit;
}
if( ScreenPcb )
{
ScreenPcb->m_Diviseur_Grille = Pcbdiv_grille;
ScreenPcb->m_UserGrid = g_UserGrid;
ScreenPcb->m_UserGridUnit = g_UserGrid_Unit;
}
g_DesignSettings.m_TrackWidthHistory[0] = g_DesignSettings.m_CurrentTrackWidth;
g_DesignSettings.m_ViaSizeHistory[0] = g_DesignSettings.m_CurrentViaSize;
for ( ii = 1; ii < HISTORY_NUMBER; ii++)
{
g_DesignSettings.m_TrackWidthHistory[ii] = 0;
g_DesignSettings.m_ViaSizeHistory[ii] = 0;
}
g_DesignSettings.m_TrackWidthHistory[0] = g_DesignSettings.m_CurrentTrackWidth;
g_DesignSettings.m_ViaSizeHistory[0] = g_DesignSettings.m_CurrentViaSize;
for( ii = 1; ii < HISTORY_NUMBER; ii++ )
{
g_DesignSettings.m_TrackWidthHistory[ii] = 0;
g_DesignSettings.m_ViaSizeHistory[ii] = 0;
}
return TRUE;
return TRUE;
}
/**********************************************************/
void WinEDA_PcbFrame::Update_config(wxWindow * displayframe)
void WinEDA_PcbFrame::Update_config( wxWindow* displayframe )
/***********************************************************/
/* enregistrement de la config */
{
wxString FullFileName;
wxString mask;
wxString FullFileName;
wxString mask;
mask = wxT("*") + g_Prj_Config_Filename_ext;
FullFileName = GetScreen()->m_FileName.AfterLast('/');
ChangeFileNameExt(FullFileName, g_Prj_Config_Filename_ext);
mask = wxT( "*" ) + g_Prj_Config_Filename_ext;
FullFileName = GetScreen()->m_FileName.AfterLast( '/' );
ChangeFileNameExt( FullFileName, g_Prj_Config_Filename_ext );
FullFileName = EDA_FileSelector(_("Save preferences"),
wxPathOnly(GetScreen()->m_FileName), /* Chemin par defaut */
FullFileName, /* nom fichier par defaut */
g_Prj_Config_Filename_ext, /* extension par defaut */
mask, /* Masque d'affichage */
displayframe,
wxFD_SAVE,
TRUE
);
if ( FullFileName.IsEmpty() ) return;
FullFileName = EDA_FileSelector( _( "Save preferences" ),
wxPathOnly( GetScreen()->m_FileName ), /* Chemin par defaut */
FullFileName, /* nom fichier par defaut */
g_Prj_Config_Filename_ext, /* extension par defaut */
mask, /* Masque d'affichage */
displayframe,
wxFD_SAVE,
TRUE
);
if( FullFileName.IsEmpty() )
return;
Pcbdiv_grille = GetScreen()->m_Diviseur_Grille;
Pcbdiv_grille = GetScreen()->m_Diviseur_Grille;
/* ecriture de la configuration */
g_EDA_Appl->WriteProjectConfig(FullFileName, wxT("/pcbnew"), ParamCfgList);
/* ecriture de la configuration */
g_EDA_Appl->WriteProjectConfig( FullFileName, wxT( "/pcbnew" ), ParamCfgList );
}