... Reimplemented without making dependency cycles. Project and ProjectFileManager publish events for change of active project or change of a project title. WindowMenus.cpp can listen for those events, so that it can update the menu appropriately. So it's all done nonintrusively in the rest of the code.
105 lines
3.0 KiB
C++
105 lines
3.0 KiB
C++
/**********************************************************************
|
|
|
|
Audacity: A Digital Audio Editor
|
|
|
|
ProjectFileIO.h
|
|
|
|
Paul Licameli split from AudacityProject.h
|
|
|
|
**********************************************************************/
|
|
|
|
#ifndef __AUDACITY_PROJECT_FILE_IO__
|
|
#define __AUDACITY_PROJECT_FILE_IO__
|
|
|
|
#include "ClientData.h" // to inherit
|
|
#include "Prefs.h" // to inherit
|
|
#include "xml/XMLTagHandler.h" // to inherit
|
|
|
|
class AudacityProject;
|
|
|
|
///\brief Object associated with a project that manages reading and writing
|
|
/// of Audacity project file formats, and autosave
|
|
class ProjectFileIO final
|
|
: public ClientData::Base
|
|
, public XMLTagHandler
|
|
, private PrefsListener
|
|
{
|
|
public:
|
|
static ProjectFileIO &Get( AudacityProject &project );
|
|
static const ProjectFileIO &Get( const AudacityProject &project );
|
|
|
|
explicit ProjectFileIO( AudacityProject &project );
|
|
ProjectFileIO( const ProjectFileIO & ) PROHIBITED;
|
|
ProjectFileIO &operator=( const ProjectFileIO & ) PROHIBITED;
|
|
~ProjectFileIO();
|
|
|
|
bool WarnOfLegacyFile( );
|
|
|
|
const FilePath &GetAutoSaveFileName() { return mAutoSaveFileName; }
|
|
|
|
// It seems odd to put this method in this class, but the results do depend
|
|
// on what is discovered while opening the file, such as whether it is a
|
|
// recovery file
|
|
void SetProjectTitle( int number = -1 );
|
|
|
|
bool IsProjectSaved() const;
|
|
|
|
void Reset();
|
|
|
|
void AutoSave();
|
|
void DeleteCurrentAutoSaveFile();
|
|
|
|
bool IsRecovered() const { return mIsRecovered; }
|
|
void SetIsRecovered( bool value ) { mIsRecovered = value; }
|
|
bool IsLoadedFromAup() const { return mbLoadedFromAup; }
|
|
void SetLoadedFromAup( bool value ) { mbLoadedFromAup = value; }
|
|
|
|
XMLTagHandler *HandleXMLChild(const wxChar *tag) override;
|
|
void WriteXMLHeader(XMLWriter &xmlFile) const;
|
|
|
|
// If the second argument is not null, that means we are saving a
|
|
// compressed project, and the wave tracks have been exported into the
|
|
// named files
|
|
void WriteXML(
|
|
XMLWriter &xmlFile, FilePaths *strOtherNamesArray) /* not override */;
|
|
|
|
private:
|
|
// XMLTagHandler callback methods
|
|
bool HandleXMLTag(const wxChar *tag, const wxChar **attrs) override;
|
|
|
|
void UpdatePrefs() override;
|
|
|
|
// non-static data members
|
|
AudacityProject &mProject;
|
|
|
|
// Last auto-save file name and path (empty if none)
|
|
FilePath mAutoSaveFileName;
|
|
|
|
// Are we currently auto-saving or not?
|
|
bool mAutoSaving{ false };
|
|
|
|
// Has this project been recovered from an auto-saved version
|
|
bool mIsRecovered{ false };
|
|
|
|
bool mbLoadedFromAup{ false };
|
|
};
|
|
|
|
class wxTopLevelWindow;
|
|
|
|
// TitleRestorer restores project window titles to what they were, in its destructor.
|
|
class TitleRestorer{
|
|
public:
|
|
TitleRestorer( wxTopLevelWindow &window, AudacityProject &project );
|
|
~TitleRestorer();
|
|
wxString sProjNumber;
|
|
wxString sProjName;
|
|
size_t UnnamedCount;
|
|
};
|
|
|
|
// This event is emitted by the project when there is a change
|
|
// in its title
|
|
wxDECLARE_EXPORTED_EVENT(AUDACITY_DLL_API,
|
|
EVT_PROJECT_TITLE_CHANGE, wxCommandEvent);
|
|
|
|
#endif
|