kicad/eeschema/lib_export.cpp

154 lines
4.1 KiB
C++

/*****************************/
/* EESchema - lib_export.cpp */
/*****************************/
/* Routines de maintenanace des librariries:
* sauvegarde, modification de librairies.
* creation edition suppression de composants
*/
#include "fctsys.h"
#include "gr_basic.h"
#include "common.h"
#include "class_drawpanel.h"
#include "confirm.h"
#include "gestfich.h"
#include "program.h"
#include "libcmp.h"
#include "general.h"
#include "protos.h"
#include "id.h"
#include <wx/filename.h>
extern int ExportPartId;
/*************************************************/
/* Routine de lecture de 1 description.
* Le format est celui des librairies, mais on ne charge que 1 composant
* ou le 1er composant s'il y en a plusieurs.
* Si le premier composant est un alias, on chargera la racine correspondante
*/
/*************************************************/
void WinEDA_LibeditFrame::OnImportPart( wxCommandEvent& event )
{
wxFileName fn;
LibraryStruct* LibTmp;
LibCmpEntry* LibEntry;
bool entryLoaded = false;
LibItemToRepeat = NULL;
wxFileDialog dlg( this, _( "Import Component" ), m_LastLibImportPath,
wxEmptyString, CompLibFileWildcard,
wxFD_OPEN | wxFD_FILE_MUST_EXIST );
if( dlg.ShowModal() == wxID_CANCEL )
return;
LibTmp = g_LibraryList;
g_LibraryList = NULL;
LoadLibraryName( this, dlg.GetPath(), wxT( "$tmplib$" ) );
if( g_LibraryList )
{
LibEntry = g_LibraryList->GetFirstEntry();
if( LibEntry )
entryLoaded = LoadOneLibraryPartAux( LibEntry, g_LibraryList );
FreeCmpLibrary( this, g_LibraryList->m_Name );
if( entryLoaded )
{
fn = dlg.GetPath();
m_LastLibImportPath = fn.GetPath();
ReCreateHToolbar();
DisplayLibInfos();
GetScreen()->ClearUndoRedoList();
DrawPanel->Refresh();
}
else
DisplayError( this, _( "File is empty" ) );
}
g_LibraryList = LibTmp;
}
/* Routine de creation d'une nouvelle librairie et de sauvegarde du
* composant courant dans cette librarie
* si create_lib == TRUE sauvegarde dans le repertoire des libr
* sinon: sauvegarde sous le nom demande sans modifications.
*
* Le format du fichier cree est dans tous les cas le meme.
*/
void WinEDA_LibeditFrame::OnExportPart( wxCommandEvent& event )
{
wxFileName fn;
wxString Name, mask, title;
LibraryStruct* NewLib, * LibTmp, * CurLibTmp;
bool createLib = ( event.GetId() == ExportPartId ) ? false : true;
if( CurrentLibEntry == NULL )
{
DisplayError( this, _( "No Part to Save" ), 10 );
return;
}
fn = CurrentLibEntry->m_Name.m_Text.Lower();
fn.SetExt( CompLibFileExtension );
title = createLib ? _( "New Library" ) : _( "Export Component" );
wxFileDialog dlg( this, title, wxGetCwd(), fn.GetFullName(),
CompLibFileWildcard, wxFD_SAVE | wxFD_OVERWRITE_PROMPT );
if( dlg.ShowModal() == wxID_CANCEL )
return;
fn = dlg.GetPath();
/* Creation d'une librairie standard pour sauvegarde */
LibTmp = g_LibraryList;
CurLibTmp = CurrentLib;
NewLib = new LibraryStruct( LIBRARY_TYPE_EESCHEMA, wxT( "$libTmp$" ),
fn.GetFullName() );
g_LibraryList = NewLib;
/* Sauvegarde du composant: */
CurrentLib = NewLib;
SaveOnePartInMemory();
bool success = NewLib->Save( fn.GetFullPath() );
if( success )
{
m_LastLibExportPath = fn.GetPath();
}
/* Suppression de la librarie temporaire */
FreeCmpLibrary( this, NewLib->m_Name );
g_LibraryList = LibTmp;
CurrentLib = CurLibTmp;
wxString msg;
if( createLib && success )
{
msg = fn.GetFullPath() + _( " - OK" );
DisplayInfoMessage( this,
_( "Note: this new library will be available only \
if it is loaded by eeschema.\nModify eeschema config if you want use it." ) );
}
else
msg = _( "Error creating " ) + fn.GetFullName();
Affiche_Message( msg );
}