diff --git a/eeschema/sim/sim_plot_frame.cpp b/eeschema/sim/sim_plot_frame.cpp index 07dc896611..3258ffcbb0 100644 --- a/eeschema/sim/sim_plot_frame.cpp +++ b/eeschema/sim/sim_plot_frame.cpp @@ -110,10 +110,6 @@ private: }; -// Store the path of saved workbooks during the session -wxString SIM_PLOT_FRAME::m_savedWorkbooksPath; - - SIM_PLOT_FRAME::SIM_PLOT_FRAME( KIWAY* aKiway, wxWindow* aParent ) : SIM_PLOT_FRAME_BASE( aParent ), m_lastSimPlot( nullptr ), @@ -152,9 +148,6 @@ SIM_PLOT_FRAME::SIM_PLOT_FRAME( KIWAY* aKiway, wxWindow* aParent ) : m_simulator->Init(); - if( m_savedWorkbooksPath.IsEmpty() ) - m_savedWorkbooksPath = Prj().GetProjectPath(); - m_reporter = new SIM_THREAD_REPORTER( this ); m_simulator->SetReporter( m_reporter ); @@ -964,8 +957,7 @@ bool SIM_PLOT_FRAME::loadWorkbook( const wxString& aPath ) if( !file.GetNextLine().ToLong( &traceType ) ) { - DISPLAY_LOAD_ERROR( "Error loading workbook: Line %d is not an integer." - ); + DISPLAY_LOAD_ERROR( "Error loading workbook: Line %d is not an integer." ); file.Close(); return false; @@ -997,6 +989,12 @@ bool SIM_PLOT_FRAME::loadWorkbook( const wxString& aPath ) file.Close(); + wxFileName filename( aPath ); + filename.MakeRelativeTo( Prj().GetProjectPath() ); + + // Remember the loaded workbook filename. + m_simulator->Settings()->SetWorkbookFilename( filename.GetFullPath() ); + // Successfully loading a workbook does not count as modifying it. m_workbook->ClrModified(); return true; @@ -1058,16 +1056,49 @@ bool SIM_PLOT_FRAME::saveWorkbook( const wxString& aPath ) bool res = file.Write(); file.Close(); - // Store the filename of the last saved workbook. It will be used to restore the simulation if - // the frame is closed and then opened again. + // Store the filename of the last saved workbook. if( res ) - m_simulator->Settings()->SetWorkbookFilename( filename.GetFullName() ); + { + filename.MakeRelativeTo( Prj().GetProjectPath() ); + m_simulator->Settings()->SetWorkbookFilename( filename.GetFullPath() ); + } m_workbook->ClrModified(); return res; } +wxString SIM_PLOT_FRAME::getDefaultFilename() +{ + wxFileName filename = m_simulator->Settings()->GetWorkbookFilename(); + + if( filename.GetName().IsEmpty() ) + { + if( Prj().GetProjectName().IsEmpty() ) + { + filename.SetName( _( "noname" ) ); + filename.SetExt( WorkbookFileExtension ); + } + else + { + filename.SetName( Prj().GetProjectName() ); + filename.SetExt( WorkbookFileExtension ); + } + } + + return filename.GetFullName(); +} + + +wxString SIM_PLOT_FRAME::getDefaultPath() +{ + wxFileName path = m_simulator->Settings()->GetWorkbookFilename(); + + path.Normalize( wxPATH_NORM_ALL, Prj().GetProjectPath() ); + return path.GetPath(); +} + + SIM_PLOT_TYPE SIM_PLOT_FRAME::getXAxisType( SIM_TYPE aType ) const { switch( aType ) @@ -1094,13 +1125,12 @@ void SIM_PLOT_FRAME::menuNewPlot( wxCommandEvent& aEvent ) void SIM_PLOT_FRAME::menuOpenWorkbook( wxCommandEvent& event ) { - wxFileDialog openDlg( this, _( "Open simulation workbook" ), m_savedWorkbooksPath, "", + wxFileDialog openDlg( this, _( "Open simulation workbook" ), getDefaultPath(), "", WorkbookFileWildcard(), wxFD_OPEN | wxFD_FILE_MUST_EXIST ); if( openDlg.ShowModal() == wxID_CANCEL ) return; - m_savedWorkbooksPath = openDlg.GetDirectory(); loadWorkbook( openDlg.GetPath() ); } @@ -1124,32 +1154,14 @@ void SIM_PLOT_FRAME::menuSaveWorkbook( wxCommandEvent& event ) void SIM_PLOT_FRAME::menuSaveWorkbookAs( wxCommandEvent& event ) { - wxFileName defaultFilename = m_simulator->Settings()->GetWorkbookFilename(); - - if( defaultFilename.GetName().IsEmpty() ) - { - if( Prj().GetProjectName().IsEmpty() ) - { - defaultFilename.SetName( _( "noname" ) ); - defaultFilename.SetExt( WorkbookFileExtension ); - } - else - { - defaultFilename.SetName( Prj().GetProjectName() ); - defaultFilename.SetExt( WorkbookFileExtension ); - } - } - - wxFileDialog saveAsDlg( this, _( "Save Simulation Workbook As" ), m_savedWorkbooksPath, - defaultFilename.GetFullPath(), WorkbookFileWildcard(), + wxFileDialog saveAsDlg( this, _( "Save Simulation Workbook As" ), getDefaultPath(), + getDefaultFilename(), WorkbookFileWildcard(), wxFD_SAVE | wxFD_OVERWRITE_PROMPT ); if( saveAsDlg.ShowModal() == wxID_CANCEL ) return; - m_savedWorkbooksPath = saveAsDlg.GetDirectory(); - - saveWorkbook( saveAsDlg.GetPath() ); + saveWorkbook( Prj().AbsolutePath( saveAsDlg.GetPath() ) ); } diff --git a/eeschema/sim/sim_plot_frame.h b/eeschema/sim/sim_plot_frame.h index 76000d4761..685a4002b5 100644 --- a/eeschema/sim/sim_plot_frame.h +++ b/eeschema/sim/sim_plot_frame.h @@ -218,6 +218,16 @@ private: */ bool saveWorkbook( const wxString& aPath ); + /** + * Return the default filename (with extension) to be used in file browser dialog. + */ + wxString getDefaultFilename(); + + /** + * Return the default path to be used in file browser dialog. + */ + wxString getDefaultPath(); + /** * Return the currently opened plot panel (or NULL if there is none). */ @@ -357,9 +367,6 @@ private: ///< and cursors name, the same color as the corresponding signal traces wxImageList* m_signalsIconColorList; - ///< A string to store the path of saved workbooks during a session - static wxString m_savedWorkbooksPath; - // Variables for temporary storage: int m_splitterLeftRightSashPosition; int m_splitterPlotAndConsoleSashPosition;