From ed0e0a00c06ee0860551c0c60d80acf60ae08ed4 Mon Sep 17 00:00:00 2001 From: Jeff Young Date: Tue, 8 Jun 2021 15:52:49 +0100 Subject: [PATCH] Clear selection before importing schematic. Also moves some error messages to use consistent terminology. Fixes https://gitlab.com/kicad/code/kicad/issues/8421 --- eeschema/files-io.cpp | 50 ++++++++++++++++++------------------------- eeschema/sheet.cpp | 2 +- 2 files changed, 22 insertions(+), 30 deletions(-) diff --git a/eeschema/files-io.cpp b/eeschema/files-io.cpp index 9dbf6161e7..39374f6841 100644 --- a/eeschema/files-io.cpp +++ b/eeschema/files-io.cpp @@ -415,8 +415,7 @@ bool SCH_EDIT_FRAME::OpenProjectFiles( const std::vector& aFileSet, in } catch( const IO_ERROR& ioe ) { - msg.Printf( _( "Error loading schematic file \"%s\"" ), - fullFileName); + msg.Printf( _( "Error loading schematic '%s'." ), fullFileName); DisplayErrorMessage( this, msg, ioe.What() ); failedLoad = true; @@ -436,7 +435,7 @@ bool SCH_EDIT_FRAME::OpenProjectFiles( const std::vector& aFileSet, in CreateScreens(); m_toolManager->RunAction( ACTIONS::zoomFitScreen, true ); - msg.Printf( _( "Failed to load \"%s\"" ), fullFileName ); + msg.Printf( _( "Failed to load '%s'." ), fullFileName ); SetMsgPanel( wxEmptyString, msg ); return false; @@ -628,7 +627,7 @@ bool SCH_EDIT_FRAME::OpenProjectFiles( const std::vector& aFileSet, in { m_infoBar->RemoveAllButtons(); m_infoBar->AddCloseButton(); - m_infoBar->ShowMessage( _( "Schematic file is read only." ), wxICON_WARNING ); + m_infoBar->ShowMessage( _( "Schematic is read only." ), wxICON_WARNING ); } #ifdef PROFILE @@ -713,7 +712,7 @@ void SCH_EDIT_FRAME::OnImportProject( wxCommandEvent& aEvent ) wxString fileFilters; wxString allWildcards; - for( auto& loader : loaders ) + for( std::pair& loader : loaders ) { if( !fileFilters.IsEmpty() ) fileFilters += wxChar( '|' ); @@ -751,7 +750,7 @@ void SCH_EDIT_FRAME::OnImportProject( wxCommandEvent& aEvent ) SCH_IO_MGR::SCH_FILE_T pluginType = SCH_IO_MGR::SCH_FILE_T::SCH_FILE_UNKNOWN; - for( auto& loader : loaders ) + for( std::pair& loader : loaders ) { if( fn.GetExt().CmpNoCase( SCH_IO_MGR::GetFileExtension( loader.second ) ) == 0 ) { @@ -766,6 +765,8 @@ void SCH_EDIT_FRAME::OnImportProject( wxCommandEvent& aEvent ) return; } + m_toolManager->GetTool()->ClearSelection(); + importFile( dlg.GetPath(), pluginType ); } @@ -801,9 +802,11 @@ bool SCH_EDIT_FRAME::SaveProject() if( newFileName.GetExt().IsEmpty() ) newFileName.SetExt( KiCadSchematicFileExtension ); - if( !newFileName.DirExists() && !newFileName.Mkdir() ) + if( ( !newFileName.DirExists() && !newFileName.Mkdir() ) || !newFileName.IsDirWritable() ) { - msg.Printf( _( "Cannot create folder \"%s\"." ), newFileName.GetPath() ); + msg.Printf( _( "Folder '%s' could not be created.\n\n" + "Make sure you have write permissions and try again." ), + newFileName.GetPath() ); wxMessageDialog dlgBadPath( this, msg, _( "Error" ), wxOK | wxICON_EXCLAMATION | wxCENTER ); @@ -812,18 +815,6 @@ bool SCH_EDIT_FRAME::SaveProject() return false; } - if( !newFileName.IsDirWritable() ) - { - msg.Printf( _( "You do not have write permissions to folder \"%s\"." ), - newFileName.GetPath() ); - - wxMessageDialog dlgBadPerms( this, msg, _( "Error" ), - wxOK | wxICON_EXCLAMATION | wxCENTER ); - - dlgBadPerms.ShowModal(); - return false; - } - Schematic().Root().SetFileName( newFileName.GetFullName() ); Schematic().RootScreen()->SetFileName( newFileName.GetFullPath() ); @@ -864,12 +855,15 @@ bool SCH_EDIT_FRAME::SaveProject() } wxLogTrace( tracePathsAndFiles, - wxT( "Changing schematic file name path from '%s' to '%s'." ), - screen->GetFileName(), tmp.GetFullPath() ); + wxT( "Moving schematic from '%s' to '%s'." ), + screen->GetFileName(), + tmp.GetFullPath() ); if( !tmp.DirExists() && !tmp.Mkdir() ) { - msg.Printf( _( "Cannot create folder \"%s\"." ), newFileName.GetPath() ); + msg.Printf( _( "Folder '%s' could not be created.\n\n" + "Make sure you have write permissions and try again." ), + newFileName.GetPath() ); wxMessageDialog dlgBadFilePath( this, msg, _( "Error" ), wxOK | wxICON_EXCLAMATION | wxCENTER ); @@ -1109,8 +1103,7 @@ bool SCH_EDIT_FRAME::importFile( const wxString& aFileName, int aFileType ) if( !LockFile( aFileName ) ) { - wxString msg = wxString::Format( _( "Schematic file \"%s\" is already open." ), - aFileName ); + wxString msg = wxString::Format( _( "Schematic '%s' is already open." ), aFileName ); DisplayError( this, msg ); return false; } @@ -1182,11 +1175,10 @@ bool SCH_EDIT_FRAME::importFile( const wxString& aFileName, int aFileType ) CreateScreens(); m_toolManager->RunAction( ACTIONS::zoomFitScreen, true ); - wxString msg; - msg.Printf( _( "Error loading schematic \"%s\".\n%s" ), aFileName, ioe.What() ); - DisplayError( this, msg ); + wxString msg = wxString::Format( _( "Error loading schematic '%s'." ), aFileName ); + DisplayErrorMessage( this, msg, ioe.What() ); - msg.Printf( _( "Failed to load \"%s\"" ), aFileName ); + msg.Printf( _( "Failed to load '%s'." ), aFileName ); SetMsgPanel( wxEmptyString, msg ); return false; diff --git a/eeschema/sheet.cpp b/eeschema/sheet.cpp index 1692771537..a357e71f79 100644 --- a/eeschema/sheet.cpp +++ b/eeschema/sheet.cpp @@ -161,7 +161,7 @@ bool SCH_EDIT_FRAME::LoadSheetFromFile( SCH_SHEET* aSheet, SCH_SHEET_PATH* aHier msg.Printf( _( "Error occurred loading schematic file \"%s\"." ), fullFilename ); DisplayErrorMessage( this, msg, ioe.What() ); - msg.Printf( _( "Failed to load schematic \"%s\"" ), fullFilename ); + msg.Printf( _( "Failed to load '%s'." ), fullFilename ); SetMsgPanel( wxEmptyString, msg ); return false;