Commit da757938 authored by Jacobo Aragunde Perez's avatar Jacobo Aragunde Perez Committed by jean-pierre charras

Commit patch for bug 1116059 (Inconsistency between confirmation dialogs)

parent eed97c54
...@@ -285,7 +285,17 @@ void LIB_EDIT_FRAME::RedrawActiveWindow( wxDC* DC, bool EraseBg ) ...@@ -285,7 +285,17 @@ void LIB_EDIT_FRAME::RedrawActiveWindow( wxDC* DC, bool EraseBg )
} }
void LIB_EDIT_FRAME::SaveActiveLibrary( wxCommandEvent& event ) void LIB_EDIT_FRAME::OnSaveActiveLibrary( wxCommandEvent& event )
{
bool newFile = false;
if( event.GetId() == ID_LIBEDIT_SAVE_CURRENT_LIB_AS )
newFile = true;
this->SaveActiveLibrary( newFile );
}
bool LIB_EDIT_FRAME::SaveActiveLibrary( bool newFile )
{ {
wxFileName fn; wxFileName fn;
wxString msg; wxString msg;
...@@ -295,7 +305,7 @@ void LIB_EDIT_FRAME::SaveActiveLibrary( wxCommandEvent& event ) ...@@ -295,7 +305,7 @@ void LIB_EDIT_FRAME::SaveActiveLibrary( wxCommandEvent& event )
if( m_library == NULL ) if( m_library == NULL )
{ {
DisplayError( this, _( "No library specified." ) ); DisplayError( this, _( "No library specified." ) );
return; return false;
} }
if( GetScreen()->IsModify() ) if( GetScreen()->IsModify() )
...@@ -304,7 +314,7 @@ void LIB_EDIT_FRAME::SaveActiveLibrary( wxCommandEvent& event ) ...@@ -304,7 +314,7 @@ void LIB_EDIT_FRAME::SaveActiveLibrary( wxCommandEvent& event )
SaveOnePartInMemory(); SaveOnePartInMemory();
} }
if( event.GetId() == ID_LIBEDIT_SAVE_CURRENT_LIB_AS ) if( newFile )
{ // Get a new name for the library { // Get a new name for the library
wxString default_path = wxGetApp().ReturnLastVisitedLibraryPath(); wxString default_path = wxGetApp().ReturnLastVisitedLibraryPath();
wxFileDialog dlg( this, _( "Component Library Name:" ), default_path, wxFileDialog dlg( this, _( "Component Library Name:" ), default_path,
...@@ -312,7 +322,7 @@ void LIB_EDIT_FRAME::SaveActiveLibrary( wxCommandEvent& event ) ...@@ -312,7 +322,7 @@ void LIB_EDIT_FRAME::SaveActiveLibrary( wxCommandEvent& event )
wxFD_SAVE | wxFD_OVERWRITE_PROMPT ); wxFD_SAVE | wxFD_OVERWRITE_PROMPT );
if( dlg.ShowModal() == wxID_CANCEL ) if( dlg.ShowModal() == wxID_CANCEL )
return; return false;
fn = dlg.GetPath(); fn = dlg.GetPath();
...@@ -330,12 +340,12 @@ void LIB_EDIT_FRAME::SaveActiveLibrary( wxCommandEvent& event ) ...@@ -330,12 +340,12 @@ void LIB_EDIT_FRAME::SaveActiveLibrary( wxCommandEvent& event )
msg = _( "Modify library file \"" ) + fn.GetFullPath() + _( "\"?" ); msg = _( "Modify library file \"" ) + fn.GetFullPath() + _( "\"?" );
if( !IsOK( this, msg ) ) if( !IsOK( this, msg ) )
return; return false;
} }
// Verify the user has write privileges before attempting to save the library file. // Verify the user has write privileges before attempting to save the library file.
if( !IsWritable( fn ) ) if( !IsWritable( fn ) )
return; return false;
ClearMsgPanel(); ClearMsgPanel();
...@@ -367,7 +377,7 @@ void LIB_EDIT_FRAME::SaveActiveLibrary( wxCommandEvent& event ) ...@@ -367,7 +377,7 @@ void LIB_EDIT_FRAME::SaveActiveLibrary( wxCommandEvent& event )
msg = _( "Error occurred while saving library file \"" ) + fn.GetFullPath() + _( "\"." ); msg = _( "Error occurred while saving library file \"" ) + fn.GetFullPath() + _( "\"." );
AppendMsgPanel( _( "*** ERROR: ***" ), msg, RED ); AppendMsgPanel( _( "*** ERROR: ***" ), msg, RED );
DisplayError( this, msg ); DisplayError( this, msg );
return; return false;
} }
} }
catch( ... /* IO_ERROR ioe */ ) catch( ... /* IO_ERROR ioe */ )
...@@ -375,7 +385,7 @@ void LIB_EDIT_FRAME::SaveActiveLibrary( wxCommandEvent& event ) ...@@ -375,7 +385,7 @@ void LIB_EDIT_FRAME::SaveActiveLibrary( wxCommandEvent& event )
libFileName.MakeAbsolute(); libFileName.MakeAbsolute();
msg = wxT( "Failed to create component library file " ) + libFileName.GetFullPath(); msg = wxT( "Failed to create component library file " ) + libFileName.GetFullPath();
DisplayError( this, msg ); DisplayError( this, msg );
return; return false;
} }
wxFileName docFileName = libFileName; wxFileName docFileName = libFileName;
...@@ -407,7 +417,7 @@ void LIB_EDIT_FRAME::SaveActiveLibrary( wxCommandEvent& event ) ...@@ -407,7 +417,7 @@ void LIB_EDIT_FRAME::SaveActiveLibrary( wxCommandEvent& event )
docFileName.GetFullPath() + _( "\"." ); docFileName.GetFullPath() + _( "\"." );
AppendMsgPanel( _( "*** ERROR: ***" ), msg, RED ); AppendMsgPanel( _( "*** ERROR: ***" ), msg, RED );
DisplayError( this, msg ); DisplayError( this, msg );
return; return false;
} }
} }
catch( ... /* IO_ERROR ioe */ ) catch( ... /* IO_ERROR ioe */ )
...@@ -416,13 +426,15 @@ void LIB_EDIT_FRAME::SaveActiveLibrary( wxCommandEvent& event ) ...@@ -416,13 +426,15 @@ void LIB_EDIT_FRAME::SaveActiveLibrary( wxCommandEvent& event )
msg = wxT( "Failed to create component document library file " ) + msg = wxT( "Failed to create component document library file " ) +
docFileName.GetFullPath(); docFileName.GetFullPath();
DisplayError( this, msg ); DisplayError( this, msg );
return; return false;
} }
msg = _( "Library file \"" ) + fn.GetFullName() + wxT( "\" Ok" ); msg = _( "Library file \"" ) + fn.GetFullName() + wxT( "\" Ok" );
fn.SetExt( DOC_EXT ); fn.SetExt( DOC_EXT );
wxString msg1 = _( "Document file \"" ) + fn.GetFullPath() + wxT( "\" Ok" ); wxString msg1 = _( "Document file \"" ) + fn.GetFullPath() + wxT( "\" Ok" );
AppendMsgPanel( msg, msg1, BLUE ); AppendMsgPanel( msg, msg1, BLUE );
return true;
} }
......
...@@ -98,7 +98,7 @@ BEGIN_EVENT_TABLE( LIB_EDIT_FRAME, EDA_DRAW_FRAME ) ...@@ -98,7 +98,7 @@ BEGIN_EVENT_TABLE( LIB_EDIT_FRAME, EDA_DRAW_FRAME )
EVT_ACTIVATE( LIB_EDIT_FRAME::OnActivate ) EVT_ACTIVATE( LIB_EDIT_FRAME::OnActivate )
/* Main horizontal toolbar. */ /* Main horizontal toolbar. */
EVT_TOOL( ID_LIBEDIT_SAVE_CURRENT_LIB, LIB_EDIT_FRAME::SaveActiveLibrary ) EVT_TOOL( ID_LIBEDIT_SAVE_CURRENT_LIB, LIB_EDIT_FRAME::OnSaveActiveLibrary )
EVT_TOOL( ID_LIBEDIT_SELECT_CURRENT_LIB, LIB_EDIT_FRAME::Process_Special_Functions ) EVT_TOOL( ID_LIBEDIT_SELECT_CURRENT_LIB, LIB_EDIT_FRAME::Process_Special_Functions )
EVT_TOOL( ID_LIBEDIT_DELETE_PART, LIB_EDIT_FRAME::DeleteOnePart ) EVT_TOOL( ID_LIBEDIT_DELETE_PART, LIB_EDIT_FRAME::DeleteOnePart )
EVT_TOOL( ID_TO_LIBVIEW, LIB_EDIT_FRAME::OnOpenLibraryViewer ) EVT_TOOL( ID_TO_LIBVIEW, LIB_EDIT_FRAME::OnOpenLibraryViewer )
...@@ -130,7 +130,7 @@ BEGIN_EVENT_TABLE( LIB_EDIT_FRAME, EDA_DRAW_FRAME ) ...@@ -130,7 +130,7 @@ BEGIN_EVENT_TABLE( LIB_EDIT_FRAME, EDA_DRAW_FRAME )
/* menubar commands */ /* menubar commands */
EVT_MENU( wxID_EXIT, LIB_EDIT_FRAME::CloseWindow ) EVT_MENU( wxID_EXIT, LIB_EDIT_FRAME::CloseWindow )
EVT_MENU( ID_LIBEDIT_SAVE_CURRENT_LIB_AS, LIB_EDIT_FRAME::SaveActiveLibrary ) EVT_MENU( ID_LIBEDIT_SAVE_CURRENT_LIB_AS, LIB_EDIT_FRAME::OnSaveActiveLibrary )
EVT_MENU( ID_LIBEDIT_GEN_PNG_FILE, LIB_EDIT_FRAME::OnPlotCurrentComponent ) EVT_MENU( ID_LIBEDIT_GEN_PNG_FILE, LIB_EDIT_FRAME::OnPlotCurrentComponent )
EVT_MENU( ID_LIBEDIT_GEN_SVG_FILE, LIB_EDIT_FRAME::OnPlotCurrentComponent ) EVT_MENU( ID_LIBEDIT_GEN_SVG_FILE, LIB_EDIT_FRAME::OnPlotCurrentComponent )
EVT_MENU( wxID_HELP, EDA_DRAW_FRAME::GetKicadHelp ) EVT_MENU( wxID_HELP, EDA_DRAW_FRAME::GetKicadHelp )
...@@ -343,15 +343,25 @@ void LIB_EDIT_FRAME::OnCloseWindow( wxCloseEvent& Event ) ...@@ -343,15 +343,25 @@ void LIB_EDIT_FRAME::OnCloseWindow( wxCloseEvent& Event )
{ {
if( GetScreen()->IsModify() ) if( GetScreen()->IsModify() )
{ {
if( !IsOK( this, _( "Component was modified!\nDiscard changes?" ) ) ) int ii = DisplayExitDialog( this, _( "Save the changes in the library before closing?" ) );
switch( ii )
{ {
case wxID_NO:
break;
case wxID_OK:
case wxID_YES:
if ( this->SaveActiveLibrary( false ) )
break;
// fall through: cancel the close because of an error
case wxID_CANCEL:
Event.Veto(); Event.Veto();
return; return;
} }
else GetScreen()->ClrModify();
{
GetScreen()->ClrModify();
}
} }
BOOST_FOREACH( const CMP_LIBRARY &lib, CMP_LIBRARY::GetLibraryList() ) BOOST_FOREACH( const CMP_LIBRARY &lib, CMP_LIBRARY::GetLibraryList() )
......
...@@ -439,13 +439,24 @@ private: ...@@ -439,13 +439,24 @@ private:
void SelectActiveLibrary( CMP_LIBRARY* aLibrary = NULL ); void SelectActiveLibrary( CMP_LIBRARY* aLibrary = NULL );
/** /**
* Function SaveActiveLibrary * Function OnSaveActiveLibrary
* it the command event handler to save the changes to the current library. * it the command event handler to save the changes to the current library.
* *
* A backup file of the current library is saved with the .bak extension before the * A backup file of the current library is saved with the .bak extension before the
* changes made to the library are saved. * changes made to the library are saved.
*/ */
void SaveActiveLibrary( wxCommandEvent& event ); void OnSaveActiveLibrary( wxCommandEvent& event );
/**
* Function SaveActiveLibrary
* saves the changes to the current library.
*
* A backup file of the current library is saved with the .bak extension before the
* changes made to the library are saved.
* @param newFile Ask for a new file name to save the library.
* @return True if the library was successfully saved.
*/
bool SaveActiveLibrary( bool newFile );
/** /**
* Function LoadComponentFromCurrentLib * Function LoadComponentFromCurrentLib
......
...@@ -320,12 +320,39 @@ void FOOTPRINT_EDIT_FRAME::OnCloseWindow( wxCloseEvent& Event ) ...@@ -320,12 +320,39 @@ void FOOTPRINT_EDIT_FRAME::OnCloseWindow( wxCloseEvent& Event )
{ {
if( GetScreen()->IsModify() ) if( GetScreen()->IsModify() )
{ {
if( !IsOK( this, _( "Module Editor: Module modified! Continue?" ) ) ) int ii = DisplayExitDialog( this, _( "Save the changes in the module before closing?" ) );
switch( ii )
{ {
Event.Veto(); return; case wxID_NO:
break;
case wxID_OK:
case wxID_YES:
// code from FOOTPRINT_EDIT_FRAME::Process_Special_Functions,
// at case ID_MODEDIT_SAVE_LIBMODULE
if( GetBoard()->m_Modules && getLibPath() != wxEmptyString )
{
if( Save_Module_In_Library( getLibPath(), GetBoard()->m_Modules, true, true ))
{
// save was correct
GetScreen()->ClrModify();
break;
}
}
else
{
DisplayError( this, _( "Library is not set, the module could not be saved." ) );
}
// fall through: cancel the close because of an error
case wxID_CANCEL:
Event.Veto();
return;
} }
} }
//close the editor
SaveSettings(); SaveSettings();
Destroy(); Destroy();
} }
......
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