1
0
Fork 0
mirror of https://github.com/juce-framework/JUCE.git synced 2026-01-10 23:44:24 +00:00

Changed the return values of some virtual methods in FileBasedDocument - Strings and File objects are now non-const, and the load/save functions return a Result object rather than a string.

This commit is contained in:
jules 2012-05-23 21:25:28 +01:00
parent 5151e2e06d
commit 53b1e351cf
10 changed files with 73 additions and 72 deletions

View file

@ -82,12 +82,12 @@ namespace
: "The Introjucer - Re-saving file: ")
<< projectFile.getFullPathName() << std::endl;
String error (justSaveResources ? proj.saveResourcesOnly (projectFile)
Result error (justSaveResources ? proj.saveResourcesOnly (projectFile)
: proj.saveProject (projectFile, true));
if (error.isNotEmpty())
if (error.failed())
{
std::cout << "Error when saving: " << error << std::endl;
std::cout << "Error when saving: " << error.getErrorMessage() << std::endl;
return 1;
}
@ -222,8 +222,9 @@ namespace
const File projectFile (getFile (args[1]));
Project proj (projectFile);
const Result result (proj.loadDocument (projectFile));
if (proj.loadDocument (projectFile).isNotEmpty())
if (result.failed())
{
std::cout << "Failed to load project: " << projectFile.getFullPathName() << std::endl;
return 1;

View file

@ -50,7 +50,8 @@ public:
{
public:
SaveThread (ProjectSaver& saver_)
: ThreadWithProgressWindow ("Saving...", true, false), saver (saver_)
: ThreadWithProgressWindow ("Saving...", true, false),
saver (saver_), result (Result::ok())
{}
void run()
@ -60,12 +61,12 @@ public:
}
ProjectSaver& saver;
String result;
Result result;
JUCE_DECLARE_NON_COPYABLE (SaveThread);
};
String save (bool showProgressBox)
Result save (bool showProgressBox)
{
if (showProgressBox)
{
@ -111,15 +112,22 @@ public:
writeReadmeFile();
if (errors.size() > 0)
{
project.setFile (oldFile);
return Result::fail (errors[0]);
}
return errors[0];
return Result::ok();
}
String saveResourcesOnly()
Result saveResourcesOnly()
{
writeBinaryDataFiles();
return errors[0];
if (errors.size() > 0)
return Result::fail (errors[0]);
return Result::ok();
}
Project::Item saveGeneratedFile (const String& filePath, const MemoryOutputStream& newData)

View file

@ -77,7 +77,7 @@ void Project::setTitle (const String& newTitle)
getMainGroup().getNameValue() = newTitle;
}
const String Project::getDocumentTitle()
String Project::getDocumentTitle()
{
return getProjectName().toString();
}
@ -209,17 +209,17 @@ static void registerRecentFile (const File& file)
StoredSettings::getInstance()->flush();
}
const String Project::loadDocument (const File& file)
Result Project::loadDocument (const File& file)
{
ScopedPointer <XmlElement> xml (XmlDocument::parse (file));
if (xml == nullptr || ! xml->hasTagName (Tags::projectRoot.toString()))
return "Not a valid Jucer project!";
return Result::fail ("Not a valid Jucer project!");
ValueTree newTree (ValueTree::fromXml (*xml));
if (! newTree.hasType (Tags::projectRoot))
return "The document contains errors and couldn't be parsed!";
return Result::fail ("The document contains errors and couldn't be parsed!");
registerRecentFile (file);
projectRoot = newTree;
@ -227,15 +227,15 @@ const String Project::loadDocument (const File& file)
removeDefunctExporters();
setMissingDefaultValues();
return String::empty;
return Result::ok();
}
const String Project::saveDocument (const File& file)
Result Project::saveDocument (const File& file)
{
return saveProject (file, false);
}
String Project::saveProject (const File& file, bool isCommandLineApp)
Result Project::saveProject (const File& file, bool isCommandLineApp)
{
updateProjectSettings();
sanitiseConfigFlags();
@ -247,7 +247,7 @@ String Project::saveProject (const File& file, bool isCommandLineApp)
return saver.save (! isCommandLineApp);
}
String Project::saveResourcesOnly (const File& file)
Result Project::saveResourcesOnly (const File& file)
{
ProjectSaver saver (*this, file);
return saver.saveResourcesOnly();
@ -256,7 +256,7 @@ String Project::saveResourcesOnly (const File& file)
//==============================================================================
File Project::lastDocumentOpened;
const File Project::getLastDocumentOpened()
File Project::getLastDocumentOpened()
{
return lastDocumentOpened;
}

View file

@ -43,12 +43,12 @@ public:
//==============================================================================
// FileBasedDocument stuff..
const String getDocumentTitle();
const String loadDocument (const File& file);
const String saveDocument (const File& file);
String saveProject (const File& file, bool isCommandLineApp);
String saveResourcesOnly (const File& file);
const File getLastDocumentOpened();
String getDocumentTitle();
Result loadDocument (const File& file);
Result saveDocument (const File& file);
Result saveProject (const File& file, bool isCommandLineApp);
Result saveResourcesOnly (const File& file);
File getLastDocumentOpened();
void setLastDocumentOpened (const File& file);
void setTitle (const String& newTitle);

View file

@ -233,7 +233,7 @@ void FilterGraph::clear()
}
//==============================================================================
const String FilterGraph::getDocumentTitle()
String FilterGraph::getDocumentTitle()
{
if (! getFile().exists())
return "Unnamed";
@ -241,29 +241,29 @@ const String FilterGraph::getDocumentTitle()
return getFile().getFileNameWithoutExtension();
}
const String FilterGraph::loadDocument (const File& file)
Result FilterGraph::loadDocument (const File& file)
{
XmlDocument doc (file);
ScopedPointer<XmlElement> xml (doc.getDocumentElement());
if (xml == nullptr || ! xml->hasTagName ("FILTERGRAPH"))
return "Not a valid filter graph file";
return Result::fail ("Not a valid filter graph file");
restoreFromXml (*xml);
return String::empty;
return Result::ok();
}
const String FilterGraph::saveDocument (const File& file)
Result FilterGraph::saveDocument (const File& file)
{
ScopedPointer<XmlElement> xml (createXml());
if (! xml->writeToFile (file, String::empty))
return "Couldn't write to the file";
return Result::fail ("Couldn't write to the file");
return String::empty;
return Result::ok();
}
const File FilterGraph::getLastDocumentOpened()
File FilterGraph::getLastDocumentOpened()
{
RecentlyOpenedFilesList recentFiles;
recentFiles.restoreFromString (appProperties->getUserSettings()

View file

@ -114,10 +114,10 @@ public:
void restoreFromXml (const XmlElement& xml);
//==============================================================================
const String getDocumentTitle();
const String loadDocument (const File& file);
const String saveDocument (const File& file);
const File getLastDocumentOpened();
String getDocumentTitle();
Result loadDocument (const File& file);
Result saveDocument (const File& file);
File getLastDocumentOpened();
void setLastDocumentOpened (const File& file);
/** The special channel index used to refer to a filter's midi channel.

View file

@ -252,7 +252,7 @@ void JucerDocument::setComponentOverlayOpacity (const float alpha)
}
//==============================================================================
const String JucerDocument::getDocumentTitle()
String JucerDocument::getDocumentTitle()
{
return className;
}
@ -406,7 +406,7 @@ bool JucerDocument::loadFromXml (const XmlElement& xml)
}
//==============================================================================
const String JucerDocument::loadDocument (const File& file)
Result JucerDocument::loadDocument (const File& file)
{
const File cppFile (file.withFileExtension (".cpp"));
@ -419,15 +419,15 @@ const String JucerDocument::loadDocument (const File& file)
if (xml != nullptr)
{
if (loadFromXml (*xml))
return String::empty;
return Result::ok();
return TRANS("Couldn't parse the XML section of this file correctly");
return Result::fail (TRANS("Couldn't parse the XML section of this file correctly"));
}
return TRANS("Not a valid Jucer cpp file");
return Result::fail (TRANS("Not a valid Jucer cpp file"));
}
const String JucerDocument::saveDocument (const File& file)
Result JucerDocument::saveDocument (const File& file)
{
const File cppFile (file.withFileExtension (".cpp"));
const File hFile (file.withFileExtension (".h"));
@ -435,19 +435,19 @@ const String JucerDocument::saveDocument (const File& file)
String templateH, templateCpp;
if (! findTemplateFiles (templateH, templateCpp))
return TRANS("Couldn't find the required Jucer template files...\n\nMake sure the template files directory is set up correctly in the preferences box.");
return Result::fail (TRANS("Couldn't find the required Jucer template files...\n\nMake sure the template files directory is set up correctly in the preferences box."));
const bool ok = writeCodeFiles (hFile, cppFile, templateH, templateCpp);
TestComponent::reloadAll();
if (ok)
return String::empty;
return Result::ok();
else
return TRANS("Couldn't write to the file.");
return Result::fail (TRANS("Couldn't write to the file."));
}
//==============================================================================
const File JucerDocument::getLastDocumentOpened()
File JucerDocument::getLastDocumentOpened()
{
return StoredSettings::getInstance()->recentFiles.getFile (0);
}

View file

@ -157,10 +157,10 @@ public:
protected:
const String getDocumentTitle();
const String loadDocument (const File& file);
const String saveDocument (const File& file);
const File getLastDocumentOpened();
String getDocumentTitle();
Result loadDocument (const File& file);
Result saveDocument (const File& file);
File getLastDocumentOpened();
void setLastDocumentOpened (const File& file);

View file

@ -75,13 +75,13 @@ bool FileBasedDocument::loadFrom (const File& newFile,
const File oldFile (documentFile);
documentFile = newFile;
String error;
Result result (Result::fail ("The file doesn't exist"));
if (newFile.existsAsFile())
{
error = loadDocument (newFile);
result = loadDocument (newFile);
if (error.isEmpty())
if (result.wasOk())
{
setChangedFlag (false);
MouseCursor::hideWaitCursor();
@ -90,10 +90,6 @@ bool FileBasedDocument::loadFrom (const File& newFile,
return true;
}
}
else
{
error = "The file doesn't exist";
}
documentFile = oldFile;
MouseCursor::hideWaitCursor();
@ -105,7 +101,7 @@ bool FileBasedDocument::loadFrom (const File& newFile,
TRANS("There was an error while trying to load the file:\n\n")
+ newFile.getFullPathName()
+ "\n\n"
+ error);
+ result.getErrorMessage());
}
return false;
@ -171,9 +167,9 @@ FileBasedDocument::SaveResult FileBasedDocument::saveAs (const File& newFile,
const File oldFile (documentFile);
documentFile = newFile;
String error (saveDocument (newFile));
const Result result (saveDocument (newFile));
if (error.isEmpty())
if (result.wasOk())
{
setChangedFlag (false);
MouseCursor::hideWaitCursor();
@ -193,7 +189,7 @@ FileBasedDocument::SaveResult FileBasedDocument::saveAs (const File& newFile,
+ TRANS("\" to the file:\n\n")
+ newFile.getFullPathName()
+ "\n\n"
+ error);
+ result.getErrorMessage());
}
return failedToWriteToFile;

View file

@ -226,21 +226,17 @@ protected:
This is used in message boxes, filenames and file choosers, so it should be
something sensible.
*/
virtual const String getDocumentTitle() = 0;
virtual String getDocumentTitle() = 0;
/** This method should try to load your document from the given file.
If it fails, it should return an error message. If it succeeds, it should return
an empty string.
@returns a Result object to indicate the whether there was an error.
*/
virtual const String loadDocument (const File& file) = 0;
virtual Result loadDocument (const File& file) = 0;
/** This method should try to write your document to the given file.
If it fails, it should return an error message. If it succeeds, it should return
an empty string.
@returns a Result object to indicate the whether there was an error.
*/
virtual const String saveDocument (const File& file) = 0;
virtual Result saveDocument (const File& file) = 0;
/** This is used for dialog boxes to make them open at the last folder you
were using.
@ -258,7 +254,7 @@ protected:
@see RecentlyOpenedFilesList
*/
virtual const File getLastDocumentOpened() = 0;
virtual File getLastDocumentOpened() = 0;
/** This is used for dialog boxes to make them open at the last folder you
were using.