Commit fa0a5141 authored by Antia Puentes 's avatar Antia Puentes Committed by jean-pierre charras

Eeschema: force file ext in"Sheet Save As" command (Bug #1122212 )

parent 330b8bff
...@@ -48,8 +48,9 @@ ...@@ -48,8 +48,9 @@
bool SCH_EDIT_FRAME::SaveEEFile( SCH_SCREEN* aScreen, bool aSaveUnderNewName, bool aCreateBackupFile ) bool SCH_EDIT_FRAME::SaveEEFile( SCH_SCREEN* aScreen, bool aSaveUnderNewName, bool aCreateBackupFile )
{ {
wxString msg; wxString msg;
wxFileName schematicFileName, backupFileName; wxFileName schematicFileName;
FILE* f; FILE* f;
bool success;
if( aScreen == NULL ) if( aScreen == NULL )
aScreen = GetScreen(); aScreen = GetScreen();
...@@ -58,56 +59,53 @@ bool SCH_EDIT_FRAME::SaveEEFile( SCH_SCREEN* aScreen, bool aSaveUnderNewName, bo ...@@ -58,56 +59,53 @@ bool SCH_EDIT_FRAME::SaveEEFile( SCH_SCREEN* aScreen, bool aSaveUnderNewName, bo
if( aScreen->GetFileName().IsEmpty() ) if( aScreen->GetFileName().IsEmpty() )
aSaveUnderNewName = true; aSaveUnderNewName = true;
if( aSaveUnderNewName == false ) /* Construct the name of the file to be saved */
{ schematicFileName = aScreen->GetFileName();
schematicFileName = aScreen->GetFileName();
// Sheet file names are relative to the root sheet path which is the current if( aSaveUnderNewName )
// working directory. The IsWritable funtion expects the path to be set. {
if( schematicFileName.GetPath().IsEmpty() ) wxFileDialog dlg( this, _( "Schematic Files" ), wxGetCwd(),
schematicFileName.Assign( wxFileName::GetCwd(), schematicFileName.GetFullName() ); schematicFileName.GetFullName(), SchematicFileWildcard,
wxFD_SAVE | wxFD_OVERWRITE_PROMPT );
if( aCreateBackupFile ) if( dlg.ShowModal() == wxID_CANCEL )
{ return false;
backupFileName = schematicFileName;
if( !IsWritable( schematicFileName ) ) schematicFileName = dlg.GetPath();
return false;
/* Rename the old file to a '.bak' one: */ if( schematicFileName.GetExt() != SchematicFileExtension )
if( schematicFileName.FileExists() ) schematicFileName.SetExt( SchematicFileExtension );
{
backupFileName.SetExt( SchematicBackupFileExtension );
if( backupFileName.FileExists() )
wxRemoveFile( backupFileName.GetFullPath() );
if( !wxRenameFile( schematicFileName.GetFullPath(), backupFileName.GetFullPath() ) )
{
msg.Printf( _( "Could not save backup of file <%s>" ),
GetChars( schematicFileName.GetFullPath() ) );
DisplayError( this, msg );
}
}
}
} }
else else
{ {
schematicFileName = aScreen->GetFileName(); // Sheet file names are relative to the root sheet path which is the current
// working directory. The IsWritable funtion expects the path to be set.
if( schematicFileName.GetPath().IsEmpty() )
schematicFileName.Assign( wxFileName::GetCwd(), schematicFileName.GetFullName() );
}
wxFileDialog dlg( this, _( "Schematic Files" ), wxGetCwd(), if( !IsWritable( schematicFileName ) )
schematicFileName.GetFullName(), SchematicFileWildcard, return false;
wxFD_SAVE | wxFD_OVERWRITE_PROMPT );
if( dlg.ShowModal() == wxID_CANCEL ) /* Create backup if requested */
return false; if( aCreateBackupFile && schematicFileName.FileExists() )
{
wxFileName backupFileName = schematicFileName;
aScreen->SetFileName( dlg.GetPath() ); /* Rename the old file to a '.bak' one: */
schematicFileName = dlg.GetPath(); backupFileName.SetExt( SchematicBackupFileExtension );
if( backupFileName.FileExists() )
wxRemoveFile( backupFileName.GetFullPath() );
if( !IsWritable( schematicFileName ) ) if( !wxRenameFile( schematicFileName.GetFullPath(), backupFileName.GetFullPath() ) )
return false; {
msg.Printf( _( "Could not save backup of file <%s>" ),
GetChars( schematicFileName.GetFullPath() ) );
DisplayError( this, msg );
}
} }
/* Save */
wxLogTrace( traceAutoSave, wxLogTrace( traceAutoSave,
wxT( "Saving file <" ) + schematicFileName.GetFullPath() + wxT( ">" ) ); wxT( "Saving file <" ) + schematicFileName.GetFullPath() + wxT( ">" ) );
...@@ -119,18 +117,11 @@ bool SCH_EDIT_FRAME::SaveEEFile( SCH_SCREEN* aScreen, bool aSaveUnderNewName, bo ...@@ -119,18 +117,11 @@ bool SCH_EDIT_FRAME::SaveEEFile( SCH_SCREEN* aScreen, bool aSaveUnderNewName, bo
return false; return false;
} }
if( aSaveUnderNewName ) success = aScreen->Save( f );
aScreen->SetFileName( schematicFileName.GetFullPath() );
bool success = aScreen->Save( f ); if( success )
if( !success )
{
DisplayError( this, _( "File write operation failed." ) );
}
else
{ {
// Delete auto save file on successful save. // Delete auto save file.
wxFileName autoSaveFileName = schematicFileName; wxFileName autoSaveFileName = schematicFileName;
autoSaveFileName.SetName( wxT( "$" ) + schematicFileName.GetName() ); autoSaveFileName.SetName( wxT( "$" ) + schematicFileName.GetName() );
...@@ -143,13 +134,19 @@ bool SCH_EDIT_FRAME::SaveEEFile( SCH_SCREEN* aScreen, bool aSaveUnderNewName, bo ...@@ -143,13 +134,19 @@ bool SCH_EDIT_FRAME::SaveEEFile( SCH_SCREEN* aScreen, bool aSaveUnderNewName, bo
wxRemoveFile( autoSaveFileName.GetFullPath() ); wxRemoveFile( autoSaveFileName.GetFullPath() );
} }
// Update the screen and frame info.
if( aSaveUnderNewName )
aScreen->SetFileName( schematicFileName.GetFullPath() );
aScreen->ClrSave(); aScreen->ClrSave();
aScreen->ClrModify(); aScreen->ClrModify();
wxString msg;
msg.Printf( _( "File %s saved" ), GetChars( aScreen->GetFileName() ) ); msg.Printf( _( "File %s saved" ), GetChars( aScreen->GetFileName() ) );
SetStatusText( msg, 0 ); SetStatusText( msg, 0 );
} }
else
{
DisplayError( this, _( "File write operation failed." ) );
}
fclose( f ); fclose( f );
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment