Add EDA_BASE_FRAME::Show() and call SaveSettings() only from there for all derived wxFrames. Remove calls to SaveSettings() elsewhere.

This commit is contained in:
Dick Hollenbeck 2014-01-27 19:29:26 -06:00
parent 786bb81c4d
commit c63fa6ff31
17 changed files with 61 additions and 41 deletions

View File

@ -141,8 +141,6 @@ void EDA_3D_FRAME::Exit3DFrame( wxCommandEvent& event )
void EDA_3D_FRAME::OnCloseWindow( wxCloseEvent& Event ) void EDA_3D_FRAME::OnCloseWindow( wxCloseEvent& Event )
{ {
SaveSettings();
if( Parent() ) if( Parent() )
Parent()->m_Draw3DFrame = NULL; Parent()->m_Draw3DFrame = NULL;

View File

@ -51,13 +51,13 @@
#define DEFAULT_AUTO_SAVE_INTERVAL 600 #define DEFAULT_AUTO_SAVE_INTERVAL 600
const wxChar* traceAutoSave = wxT( "KicadAutoSave" ); const wxChar traceAutoSave[] = wxT( "KicadAutoSave" );
/// Configuration file entry name for auto save interval. /// Configuration file entry name for auto save interval.
static const wxChar* entryAutoSaveInterval = wxT( "AutoSaveInterval" ); static const wxChar entryAutoSaveInterval[] = wxT( "AutoSaveInterval" );
/// Configuration file entry for wxAuiManger perspective. /// Configuration file entry for wxAuiManger perspective.
static const wxChar* entryPerspective = wxT( "Perspective" ); static const wxChar entryPerspective[] = wxT( "Perspective" );
@ -141,6 +141,19 @@ bool EDA_BASE_FRAME::ProcessEvent( wxEvent& aEvent )
} }
bool EDA_BASE_FRAME::Show( bool show )
{
if( !show ) // closing
{
SaveSettings(); // virtual, wxFrame specific
}
int ret = wxFrame::Show( show );
return ret;
}
void EDA_BASE_FRAME::onAutoSaveTimer( wxTimerEvent& aEvent ) void EDA_BASE_FRAME::onAutoSaveTimer( wxTimerEvent& aEvent )
{ {
if( !doAutoSave() ) if( !doAutoSave() )
@ -231,7 +244,7 @@ void EDA_BASE_FRAME::SaveSettings()
wxString text; wxString text;
wxConfig* config = wxGetApp().GetSettings(); wxConfig* config = wxGetApp().GetSettings();
if( ( config == NULL ) || IsIconized() ) if( !config || IsIconized() )
return; return;
m_FrameSize = GetSize(); m_FrameSize = GetSize();
@ -258,10 +271,15 @@ void EDA_BASE_FRAME::SaveSettings()
config->Write( text, m_autoSaveInterval ); config->Write( text, m_autoSaveInterval );
} }
// Once this is fully implemented, wxAuiManager will be used to maintain the persistance of // Once this is fully implemented, wxAuiManager will be used to maintain
// the main frame and all it's managed windows and all of the legacy frame persistence // the persistance of the main frame and all it's managed windows and
// position code can be removed. // all of the legacy frame persistence position code can be removed.
config->Write( m_FrameName + entryPerspective, m_auimgr.SavePerspective() ); wxString perspective = m_auimgr.SavePerspective();
// printf( "perspective(%s): %s\n",
// TO_UTF8( m_FrameName + entryPerspective ), TO_UTF8( perspective ) );
config->Write( m_FrameName + entryPerspective, perspective );
} }
@ -270,6 +288,7 @@ void EDA_BASE_FRAME::PrintMsg( const wxString& text )
SetStatusText( text ); SetStatusText( text );
} }
void EDA_BASE_FRAME::UpdateFileHistory( const wxString& FullFileName, void EDA_BASE_FRAME::UpdateFileHistory( const wxString& FullFileName,
wxFileHistory * aFileHistory ) wxFileHistory * aFileHistory )
{ {
@ -283,7 +302,7 @@ void EDA_BASE_FRAME::UpdateFileHistory( const wxString& FullFileName,
wxString EDA_BASE_FRAME::GetFileFromHistory( int cmdId, const wxString& type, wxString EDA_BASE_FRAME::GetFileFromHistory( int cmdId, const wxString& type,
wxFileHistory * aFileHistory ) wxFileHistory* aFileHistory )
{ {
wxString fn, msg; wxString fn, msg;
size_t i; size_t i;

View File

@ -158,7 +158,6 @@ void DISPLAY_FOOTPRINTS_FRAME::OnCloseWindow( wxCloseEvent& event )
if( m_Draw3DFrame ) if( m_Draw3DFrame )
m_Draw3DFrame->Close( true ); m_Draw3DFrame->Close( true );
SaveSettings();
Destroy(); Destroy();
} }

View File

@ -337,7 +337,6 @@ void CVPCB_MAINFRAME::OnCloseWindow( wxCloseEvent& Event )
m_DisplayFootprintFrame->Close( true ); m_DisplayFootprintFrame->Close( true );
m_modified = false; m_modified = false;
SaveSettings();
Destroy(); Destroy();
return; return;
} }

View File

@ -375,7 +375,6 @@ void LIB_EDIT_FRAME::OnCloseWindow( wxCloseEvent& Event )
} }
} }
SaveSettings();
Destroy(); Destroy();
} }

View File

@ -505,7 +505,6 @@ void SCH_EDIT_FRAME::OnCloseWindow( wxCloseEvent& aEvent )
/* all sub sheets are deleted, only the main sheet is usable */ /* all sub sheets are deleted, only the main sheet is usable */
m_CurrentSheet->Clear(); m_CurrentSheet->Clear();
SaveSettings();
Destroy(); Destroy();
} }

View File

@ -250,8 +250,6 @@ LIB_VIEW_FRAME* LIB_VIEW_FRAME::GetActiveLibraryViewer()
void LIB_VIEW_FRAME::OnCloseWindow( wxCloseEvent& Event ) void LIB_VIEW_FRAME::OnCloseWindow( wxCloseEvent& Event )
{ {
SaveSettings();
if( m_semaphore ) if( m_semaphore )
{ {
m_semaphore->Post(); m_semaphore->Post();

View File

@ -177,7 +177,6 @@ GERBVIEW_FRAME::~GERBVIEW_FRAME()
void GERBVIEW_FRAME::OnCloseWindow( wxCloseEvent& Event ) void GERBVIEW_FRAME::OnCloseWindow( wxCloseEvent& Event )
{ {
SaveSettings();
Destroy(); Destroy();
} }

View File

@ -101,7 +101,7 @@ enum ID_DRAWFRAME_TYPE
/// Custom trace mask to enable and disable auto save tracing. /// Custom trace mask to enable and disable auto save tracing.
extern const wxChar* traceAutoSave; extern const wxChar traceAutoSave[];
/** /**
@ -175,7 +175,18 @@ public:
* @warning If you override this function in a derived class, make sure you call * @warning If you override this function in a derived class, make sure you call
* down to this or the auto save feature will be disabled. * down to this or the auto save feature will be disabled.
*/ */
virtual bool ProcessEvent( wxEvent& aEvent ); bool ProcessEvent( wxEvent& aEvent ); // overload wxFrame::ProcessEvent()
/**
* Function Show
* hooks the wxFrame close scenario so we can grab the window size and position
* in the wxFrame specific SaveSettings() function. SaveSettings() is
* called for all derived wxFrames in this base class overload. Calling it
* from a destructor is deprecated since the wxFrame's position is not available
* in the destructor on linux. In other words, don't call SaveSettings() anywhere,
* except in this one function.
*/
bool Show( bool show ); // overload wxFrame::Show()
void SetAutoSaveInterval( int aInterval ) { m_autoSaveInterval = aInterval; } void SetAutoSaveInterval( int aInterval ) { m_autoSaveInterval = aInterval; }
@ -216,11 +227,13 @@ public:
virtual void LoadSettings(); virtual void LoadSettings();
/** /**
* Save common frame parameters from configuration. * Save common frame parameters to configuration data file.
* *
* The method is virtual so you can override it to save frame specific * The method is virtual so you can override it to save frame specific
* parameters. Don't forget to call the base method or your frames won't * parameters. Don't forget to call the base class's SaveSettings() from
* remember their positions and sizes. * your derived SaveSettings() otherwise the frames won't remember their
* positions and sizes. The virtual call to SaveSettings is done safely
* only in EDA_BASE_FRAME::Show( bool ).
*/ */
virtual void SaveSettings(); virtual void SaveSettings();

View File

@ -164,8 +164,6 @@ void KICAD_MANAGER_FRAME::OnCloseWindow( wxCloseEvent& Event )
Event.SetCanVeto( true ); Event.SetCanVeto( true );
SaveSettings();
// Close the help frame // Close the help frame
if( wxGetApp().GetHtmlHelpController() ) if( wxGetApp().GetHtmlHelpController() )
{ {

View File

@ -194,6 +194,7 @@ void PL_EDITOR_FRAME::OnCloseWindow( wxCloseEvent& Event )
GetChars( filename ) ); GetChars( filename ) );
int ii = DisplayExitDialog( this, msg ); int ii = DisplayExitDialog( this, msg );
switch( ii ) switch( ii )
{ {
case wxID_CANCEL: case wxID_CANCEL:
@ -228,12 +229,11 @@ void PL_EDITOR_FRAME::OnCloseWindow( wxCloseEvent& Event )
} }
} }
SaveSettings();
wxGetApp().SaveCurrentSetupValues( m_configSettings );
// do not show the window because we do not want any paint event // do not show the window because we do not want any paint event
Show( false ); Show( false );
wxGetApp().SaveCurrentSetupValues( m_configSettings );
// On Linux, m_propertiesPagelayout must be destroyed // On Linux, m_propertiesPagelayout must be destroyed
// before deleting the main frame to avoid a crash when closing // before deleting the main frame to avoid a crash when closing
m_propertiesPagelayout->Destroy(); m_propertiesPagelayout->Destroy();

View File

@ -28,7 +28,7 @@
*/ */
/* functions relatives to the design rules editor /* functions relative to the design rules editor
*/ */
#include <fctsys.h> #include <fctsys.h>
#include <class_drawpanel.h> #include <class_drawpanel.h>
@ -46,10 +46,9 @@
#include <wx/generic/gridctrl.h> #include <wx/generic/gridctrl.h>
#include <dialog_design_rules_aux_helper_class.h> #include <dialog_design_rules_aux_helper_class.h>
// Column labels for net lists // Column labels for net lists
#define NET_TITLE _( "Net" ) #define NET_TITLE _( "Net" )
#define CLASS_TITLE _( "Class" ) #define CLASS_TITLE _( "Class" )
// Field Positions on rules grid // Field Positions on rules grid
enum { enum {

View File

@ -304,8 +304,6 @@ FOOTPRINT_WIZARD_FRAME::~FOOTPRINT_WIZARD_FRAME()
*/ */
void FOOTPRINT_WIZARD_FRAME::OnCloseWindow( wxCloseEvent& Event ) void FOOTPRINT_WIZARD_FRAME::OnCloseWindow( wxCloseEvent& Event )
{ {
SaveSettings();
if( m_Semaphore ) if( m_Semaphore )
{ {
m_Semaphore->Post(); m_Semaphore->Post();

View File

@ -29,7 +29,7 @@ While exploring the possibility of local caching of the zip file, I discovered
this command to retrieve the time stamp of the last commit into any particular this command to retrieve the time stamp of the last commit into any particular
repo: repo:
$time curl -I -i https://api.github.com/repos/KiCad/Mounting_Holes.pretty $time curl -I -i https://api.github.com/repos/KiCad/Mounting_Holes.pretty/commits
This gets just the header to what would otherwise return information on the repo This gets just the header to what would otherwise return information on the repo
in JSON format, and is reasonably faster than actually getting the repo in JSON format, and is reasonably faster than actually getting the repo

View File

@ -384,7 +384,6 @@ void FOOTPRINT_EDIT_FRAME::OnCloseWindow( wxCloseEvent& Event )
} }
//close the editor //close the editor
SaveSettings();
Destroy(); Destroy();
} }

View File

@ -163,10 +163,13 @@ FOOTPRINT_VIEWER_FRAME::FOOTPRINT_VIEWER_FRAME( PCB_BASE_FRAME* aParent,
// Ensure all layers and items are visible: // Ensure all layers and items are visible:
GetBoard()->SetVisibleAlls(); GetBoard()->SetVisibleAlls();
SetScreen( new PCB_SCREEN( GetPageSizeIU() ) ); SetScreen( new PCB_SCREEN( GetPageSizeIU() ) );
GetScreen()->m_Center = true; // Center coordinate origins on screen. GetScreen()->m_Center = true; // Center coordinate origins on screen.
LoadSettings(); LoadSettings();
SetSize( m_FramePos.x, m_FramePos.y, m_FrameSize.x, m_FrameSize.y ); SetSize( m_FramePos.x, m_FramePos.y, m_FrameSize.x, m_FrameSize.y );
GetScreen()->SetGrid( ID_POPUP_GRID_LEVEL_1000 + m_LastGridSizeId ); GetScreen()->SetGrid( ID_POPUP_GRID_LEVEL_1000 + m_LastGridSizeId );
ReCreateHToolbar(); ReCreateHToolbar();
@ -239,9 +242,12 @@ FOOTPRINT_VIEWER_FRAME::FOOTPRINT_VIEWER_FRAME( PCB_BASE_FRAME* aParent,
m_auimgr.GetPane( m_mainToolBar ).BestSize( tbsize ); m_auimgr.GetPane( m_mainToolBar ).BestSize( tbsize );
} }
// Set min size (overwrite params read in LoadPerspective(), is any) #if 0 // no.
// Set min size (overwrite params read in LoadPerspective(), if any)
m_auimgr.GetPane( m_libList ).MinSize( minsize ); m_auimgr.GetPane( m_libList ).MinSize( minsize );
m_auimgr.GetPane( m_footprintList ).MinSize( minsize ); m_auimgr.GetPane( m_footprintList ).MinSize( minsize );
#endif
// after changing something to the aui manager, // after changing something to the aui manager,
// call Update()() to reflect the changes // call Update()() to reflect the changes
@ -260,8 +266,6 @@ FOOTPRINT_VIEWER_FRAME::FOOTPRINT_VIEWER_FRAME( PCB_BASE_FRAME* aParent,
FOOTPRINT_VIEWER_FRAME::~FOOTPRINT_VIEWER_FRAME() FOOTPRINT_VIEWER_FRAME::~FOOTPRINT_VIEWER_FRAME()
{ {
SaveSettings();
if( m_Draw3DFrame ) if( m_Draw3DFrame )
m_Draw3DFrame->Destroy(); m_Draw3DFrame->Destroy();
} }

View File

@ -708,8 +708,6 @@ void PCB_EDIT_FRAME::OnCloseWindow( wxCloseEvent& Event )
wxMessageBox( msg, wxGetApp().GetAppName(), wxOK | wxICON_ERROR, this ); wxMessageBox( msg, wxGetApp().GetAppName(), wxOK | wxICON_ERROR, this );
} }
SaveSettings();
// Delete board structs and undo/redo lists, to avoid crash on exit // Delete board structs and undo/redo lists, to avoid crash on exit
// when deleting some structs (mainly in undo/redo lists) too late // when deleting some structs (mainly in undo/redo lists) too late
Clear_Pcb( false ); Clear_Pcb( false );
@ -717,6 +715,7 @@ void PCB_EDIT_FRAME::OnCloseWindow( wxCloseEvent& Event )
// do not show the window because ScreenPcb will be deleted and we do not // do not show the window because ScreenPcb will be deleted and we do not
// want any paint event // want any paint event
Show( false ); Show( false );
Destroy(); Destroy();
} }