kicad/kicad/prjconfig.cpp

138 lines
4.0 KiB
C++

/*************************************************************/
/** prjconfig.cpp : load and save configuration (file *.pro) */
/*************************************************************/
#ifdef KICAD_PYTHON
#include <pyhandler.h>
#endif
#include "fctsys.h"
#include "appl_wxstruct.h"
#include "common.h"
#include "confirm.h"
#include "gestfich.h"
#include "prjconfig.h"
#include "kicad.h"
#include "build_version.h"
static const wxString GeneralGroupName( wxT( "/general" ) );
/* Kicad project file entry names. */
static const wxString SchematicRootNameEntry( wxT( "RootSch" ) );
static const wxString BoardFileNameEntry( wxT( "BoardNm" ) );
void WinEDA_MainFrame::CreateNewProject( const wxString PrjFullFileName )
{
wxString tmp;
wxFileName newProjectName = PrjFullFileName;
// Init default config filename
tmp = wxGetApp().FindLibraryPath( wxT( "kicad.pro" ) );
if( !wxFileName::FileExists( tmp ) )
{
DisplayInfoMessage( NULL, _( "Project template file <kicad.pro> not found " ) );
return;
}
else
{
wxCopyFile( tmp, PrjFullFileName );
}
m_SchematicRootFileName = wxFileName( newProjectName.GetName(),
SchematicFileExtension ).GetFullName();
m_BoardFileName = wxFileName( newProjectName.GetName(),
BoardFileExtension ).GetFullName();
m_ProjectFileName = newProjectName;
wxGetApp().WriteProjectConfig( PrjFullFileName, GeneralGroupName, NULL );
}
void WinEDA_MainFrame::OnLoadProject( wxCommandEvent& event )
{
int style;
wxString title;
if( event.GetId() != wxID_ANY )
{
if( event.GetId() == ID_NEW_PROJECT )
{
title = _( "Create New Project" );
style = wxFD_SAVE | wxFD_OVERWRITE_PROMPT;
}
else
{
title = _( "Open Existing Project" );
style = wxFD_OPEN | wxFD_FILE_MUST_EXIST;
}
SetLastProject( m_ProjectFileName.GetFullPath() );
wxFileDialog dlg( this, title, wxGetCwd(), wxEmptyString,
ProjectFileWildcard, style );
if( dlg.ShowModal() == wxID_CANCEL )
return;
m_ProjectFileName = dlg.GetPath();
if( event.GetId() == ID_NEW_PROJECT )
CreateNewProject( m_ProjectFileName.GetFullPath() );
SetLastProject( m_ProjectFileName.GetFullPath() );
}
wxLogDebug( wxT( "Loading Kicad project file: " ) +
m_ProjectFileName.GetFullPath() );
if( !m_ProjectFileName.FileExists() )
{
DisplayError( this, _( "Kicad project file <" ) +
m_ProjectFileName.GetFullPath() + _( "> not found" ) );
return;
}
wxSetWorkingDirectory( m_ProjectFileName.GetPath() );
wxGetApp().ReadProjectConfig( m_ProjectFileName.GetFullPath(),
GeneralGroupName, NULL, false );
SetTitle( wxGetApp().GetTitle() + wxT( " " ) + GetBuildVersion() +
wxT( " " ) + m_ProjectFileName.GetFullPath() );
SetLastProject( m_ProjectFileName.GetFullPath() );
m_LeftWin->ReCreateTreePrj();
PrintMsg( _( "Working dir: " ) + m_ProjectFileName.GetPath() +
_( "\nProject: " ) + m_ProjectFileName.GetFullName() +
wxT( "\n" ) );
#ifdef KICAD_PYTHON
PyHandler::GetInstance()->TriggerEvent( wxT( "kicad::LoadProject" ),
PyHandler::Convert( m_ProjectFileName.GetFullPath() ) );
#endif
}
/**
* Save the project top level configuration parameters.
*/
void WinEDA_MainFrame::OnSaveProject( wxCommandEvent& event )
{
wxString fn;
wxFileDialog dlg( this, _( "Save Project File" ), wxGetCwd(),
m_ProjectFileName.GetFullName(), ProjectFileWildcard,
wxFD_SAVE | wxFD_OVERWRITE_PROMPT );
if( dlg.ShowModal() == wxID_CANCEL )
return;
m_ProjectFileName = dlg.GetPath();
wxGetApp().WriteProjectConfig( m_ProjectFileName.GetFullPath(),
GeneralGroupName, NULL );
}