/****************************/ /* EESCHEMA - files-io.cpp */ /****************************/ #include "fctsys.h" #include "gr_basic.h" #include "common.h" #include "program.h" #include "libcmp.h" #include "general.h" #include "protos.h" #include "id.h" /* Fonctions locales */ /****************************************************************/ void WinEDA_SchematicFrame::Save_File( wxCommandEvent& event ) /****************************************************************/ /* Commands to save shepatic project or the current page. */ { int id = event.GetId(); switch( id ) { case ID_SAVE_PROJECT: /* Update Schematic File */ SaveProject( this ); break; case ID_SAVE_ONE_SHEET: /* Update Schematic File */ SaveEEFile( NULL, FILE_SAVE_AS ); break; case ID_SAVE_ONE_SHEET_AS: /* Save EED (new name) */ SaveEEFile( NULL, FILE_SAVE_NEW ); break; default: DisplayError( this, wxT( "WinEDA_SchematicFrame::Save_File Internal Error" ) ); break; } } /******************************************************************************************/ bool WinEDA_SchematicFrame::LoadOneSheet( SCH_SCREEN* screen, const wxString& filename ) /******************************************************************************************/ { wxString FullFileName = filename; if( screen->EEDrawList != NULL ) { if( !IsOK( this, _( "Clear SubHierarchy ?" ) ) ) return FALSE; } if( FullFileName.IsEmpty() ) { wxString mask; mask = wxT( "*" ) + g_SchExtBuffer; FullFileName = EDA_FileSelector( _( "Schematic files:" ), wxEmptyString, /* default path */ screen->m_FileName, /* default filename */ g_SchExtBuffer, /* extension par defaut */ mask, /* Masque d'affichage */ this, wxFD_OPEN, FALSE ); if( FullFileName.IsEmpty() ) return FALSE; } ClearProjectDrawList( screen, TRUE ); screen->m_FileName = FullFileName; LoadOneEEFile( screen, FullFileName ); screen->SetModify(); if( GetScreen() == screen ) Refresh( TRUE ); return TRUE; } /****************************************************/ void SaveProject( WinEDA_SchematicFrame* frame ) /****************************************************/ /* Sauvegarde toutes les feuilles du projet * et crée une librairie archive des composants, de nom .chche.lib */ { SCH_SCREEN* screen_tmp; wxString LibArchiveFileName; if( frame == NULL ) return; screen_tmp = frame->GetScreen(); EDA_ScreenList ScreenList( NULL ); for( ActiveScreen = ScreenList.GetFirst(); ActiveScreen != NULL; ActiveScreen = ScreenList.GetNext() ) { frame->m_CurrentScreen = ActiveScreen; frame->SaveEEFile( NULL, FILE_SAVE_AS ); } frame->m_CurrentScreen = ActiveScreen = screen_tmp; /* Creation du fichier d'archivage composants en repertoire courant */ LibArchiveFileName = MakeFileName( wxEmptyString, ScreenSch->m_FileName, wxEmptyString ); ChangeFileNameExt( LibArchiveFileName, wxEmptyString ); /* mise a jour extension */ LibArchiveFileName += wxT( ".cache" ) + g_LibExtBuffer; LibArchive( frame, LibArchiveFileName ); } /************************/ int CountCmpNumber() /************************/ /* Routine retournant le nombre de composants dans le schema, * powers non comprises */ { BASE_SCREEN* Window; EDA_BaseStruct* Phead; int Nb = 0; Window = ScreenSch; while( Window ) { for( Phead = Window->EEDrawList; Phead != NULL; Phead = Phead->Pnext ) { if( Phead->Type() == DRAW_LIB_ITEM_STRUCT_TYPE ) { DrawPartStruct* Cmp = (DrawPartStruct*) Phead; if( Cmp->m_Field[VALUE].m_Text.GetChar( 0 ) != '#' ) Nb++; } } Window = (BASE_SCREEN*) Window->Pnext; } return Nb; }