From 646352937197be7243a5cac68b22a21047425121 Mon Sep 17 00:00:00 2001 From: jules Date: Fri, 10 May 2019 18:35:00 +0100 Subject: [PATCH] Another batch of conversion of methods which returned bare XmlElement* to return unique_ptrs --- .../Source/Filters/FilterGraph.cpp | 6 ++--- .../Source/Filters/FilterGraph.h | 4 ++-- .../Source/UI/MainHostWindow.cpp | 2 +- .../CodeEditor/jucer_OpenDocumentManager.cpp | 4 ++-- .../CodeEditor/jucer_OpenDocumentManager.h | 2 +- .../Components/jucer_TabbedComponentHandler.h | 10 ++++----- .../Documents/jucer_ButtonDocument.cpp | 13 +++++------ .../Documents/jucer_ButtonDocument.h | 4 ++-- .../Documents/jucer_ComponentDocument.cpp | 10 ++++----- .../Documents/jucer_ComponentDocument.h | 2 +- .../ComponentEditor/jucer_JucerDocument.cpp | 4 ++-- .../ComponentEditor/jucer_JucerDocument.h | 2 +- .../juce_ChannelRemappingAudioSource.cpp | 4 ++-- .../juce_ChannelRemappingAudioSource.h | 2 +- .../audio_io/juce_AudioDeviceManager.cpp | 15 +++++++------ .../audio_io/juce_AudioDeviceManager.h | 2 +- .../Standalone/juce_StandaloneFilterWindow.h | 2 +- .../processors/juce_PluginDescription.cpp | 6 +++-- .../processors/juce_PluginDescription.h | 2 +- .../scanning/juce_KnownPluginList.cpp | 6 ++--- .../scanning/juce_KnownPluginList.h | 2 +- .../commands/juce_KeyPressMappingSet.cpp | 22 +++++++++---------- .../commands/juce_KeyPressMappingSet.h | 2 +- 23 files changed, 63 insertions(+), 65 deletions(-) diff --git a/extras/AudioPluginHost/Source/Filters/FilterGraph.cpp b/extras/AudioPluginHost/Source/Filters/FilterGraph.cpp index 5e1bc9d1ea..914d9e4b59 100644 --- a/extras/AudioPluginHost/Source/Filters/FilterGraph.cpp +++ b/extras/AudioPluginHost/Source/Filters/FilterGraph.cpp @@ -354,7 +354,7 @@ static XmlElement* createNodeXml (AudioProcessorGraph::Node* const node) noexcep { PluginDescription pd; plugin->fillInPluginDescription (pd); - e->addChildElement (pd.createXml()); + e->addChildElement (pd.createXml().release()); } { @@ -437,9 +437,9 @@ void FilterGraph::createNodeFromXml (const XmlElement& xml) } } -XmlElement* FilterGraph::createXml() const +std::unique_ptr FilterGraph::createXml() const { - auto* xml = new XmlElement ("FILTERGRAPH"); + auto xml = std::make_unique ("FILTERGRAPH"); for (auto* node : graph.getNodes()) xml->addChildElement (createNodeXml (node)); diff --git a/extras/AudioPluginHost/Source/Filters/FilterGraph.h b/extras/AudioPluginHost/Source/Filters/FilterGraph.h index 318e8c90c1..bc0686a0fb 100644 --- a/extras/AudioPluginHost/Source/Filters/FilterGraph.h +++ b/extras/AudioPluginHost/Source/Filters/FilterGraph.h @@ -64,8 +64,8 @@ public: void audioProcessorChanged (AudioProcessor*) override { changed(); } //============================================================================== - XmlElement* createXml() const; - void restoreFromXml (const XmlElement& xml); + std::unique_ptr createXml() const; + void restoreFromXml (const XmlElement&); static const char* getFilenameSuffix() { return ".filtergraph"; } static const char* getFilenameWildcard() { return "*.filtergraph"; } diff --git a/extras/AudioPluginHost/Source/UI/MainHostWindow.cpp b/extras/AudioPluginHost/Source/UI/MainHostWindow.cpp index d8aa6827be..3d60c104bf 100644 --- a/extras/AudioPluginHost/Source/UI/MainHostWindow.cpp +++ b/extras/AudioPluginHost/Source/UI/MainHostWindow.cpp @@ -574,7 +574,7 @@ void MainHostWindow::showAudioSettings() ModalCallbackFunction::create ([safeThis] (int) { - std::unique_ptr audioState (safeThis->deviceManager.createStateXml()); + auto audioState = safeThis->deviceManager.createStateXml(); getAppProperties().getUserSettings()->setValue ("audioDeviceState", audioState.get()); getAppProperties().getUserSettings()->saveIfNeeded(); diff --git a/extras/Projucer/Source/CodeEditor/jucer_OpenDocumentManager.cpp b/extras/Projucer/Source/CodeEditor/jucer_OpenDocumentManager.cpp index 214195c850..f84d602e91 100644 --- a/extras/Projucer/Source/CodeEditor/jucer_OpenDocumentManager.cpp +++ b/extras/Projucer/Source/CodeEditor/jucer_OpenDocumentManager.cpp @@ -423,9 +423,9 @@ static void saveDocList (const Array & list, Xml } } -XmlElement* RecentDocumentList::createXML() const +std::unique_ptr RecentDocumentList::createXML() const { - XmlElement* xml = new XmlElement ("RECENT_DOCUMENTS"); + auto xml = std::make_unique ("RECENT_DOCUMENTS"); saveDocList (previousDocs, *xml->createNewChildElement ("PREVIOUS")); saveDocList (nextDocs, *xml->createNewChildElement ("NEXT")); diff --git a/extras/Projucer/Source/CodeEditor/jucer_OpenDocumentManager.h b/extras/Projucer/Source/CodeEditor/jucer_OpenDocumentManager.h index 1b9c0f6ba8..9607b4f3c8 100644 --- a/extras/Projucer/Source/CodeEditor/jucer_OpenDocumentManager.h +++ b/extras/Projucer/Source/CodeEditor/jucer_OpenDocumentManager.h @@ -142,7 +142,7 @@ public: OpenDocumentManager::Document* getClosestPreviousDocOtherThan (OpenDocumentManager::Document* oneToAvoid) const; void restoreFromXML (Project& project, const XmlElement& xml); - XmlElement* createXML() const; + std::unique_ptr createXML() const; private: bool documentAboutToClose (OpenDocumentManager::Document*); diff --git a/extras/Projucer/Source/ComponentEditor/Components/jucer_TabbedComponentHandler.h b/extras/Projucer/Source/ComponentEditor/Components/jucer_TabbedComponentHandler.h index 9c6ba03187..2667cb0489 100644 --- a/extras/Projucer/Source/ComponentEditor/Components/jucer_TabbedComponentHandler.h +++ b/extras/Projucer/Source/ComponentEditor/Components/jucer_TabbedComponentHandler.h @@ -60,7 +60,7 @@ public: e->setAttribute ("initialTab", t->getCurrentTabIndex()); for (int i = 0; i < t->getNumTabs(); ++i) - e->addChildElement (getTabState (t, i)); + e->addChildElement (getTabState (t, i).release()); return e; } @@ -228,9 +228,9 @@ public: } //============================================================================== - static XmlElement* getTabState (TabbedComponent* tc, int tabIndex) + static std::unique_ptr getTabState (TabbedComponent* tc, int tabIndex) { - XmlElement* xml = new XmlElement ("TAB"); + auto xml = std::make_unique ("TAB"); xml->setAttribute ("name", tc->getTabNames() [tabIndex]); xml->setAttribute ("colour", tc->getTabBackgroundColour (tabIndex).toString()); @@ -698,7 +698,7 @@ private: : ComponentUndoableAction (comp, l), indexToRemove (indexToRemove_) { - previousState.reset (getTabState (comp, indexToRemove)); + previousState = getTabState (comp, indexToRemove); } bool perform() @@ -1164,7 +1164,7 @@ private: { showCorrectTab(); - std::unique_ptr state (getTabState (getComponent(), from)); + auto state = getTabState (getComponent(), from); getComponent()->removeTab (from); addNewTab (getComponent(), to); diff --git a/extras/Projucer/Source/ComponentEditor/Documents/jucer_ButtonDocument.cpp b/extras/Projucer/Source/ComponentEditor/Documents/jucer_ButtonDocument.cpp index 89698edd5c..fddd154682 100644 --- a/extras/Projucer/Source/ComponentEditor/Documents/jucer_ButtonDocument.cpp +++ b/extras/Projucer/Source/ComponentEditor/Documents/jucer_ButtonDocument.cpp @@ -165,22 +165,19 @@ String ButtonDocument::getTypeName() const JucerDocument* ButtonDocument::createCopy() { - ButtonDocument* newOne = new ButtonDocument (cpp); + auto newOne = new ButtonDocument (cpp); newOne->resources = resources; - - std::unique_ptr xml (createXml()); - newOne->loadFromXml (*xml); - + newOne->loadFromXml (*createXml()); return newOne; } -XmlElement* ButtonDocument::createXml() const +std::unique_ptr ButtonDocument::createXml() const { - XmlElement* const doc = JucerDocument::createXml(); + auto doc = JucerDocument::createXml(); for (int i = 0; i < 7; ++i) { - XmlElement* e = paintRoutines [i]->createXml(); + auto e = paintRoutines[i]->createXml(); e->setAttribute ("buttonState", stateNames [i]); e->setAttribute ("enabled", paintStatesEnabled [i]); diff --git a/extras/Projucer/Source/ComponentEditor/Documents/jucer_ButtonDocument.h b/extras/Projucer/Source/ComponentEditor/Documents/jucer_ButtonDocument.h index 6bb89e486c..10d79a425f 100644 --- a/extras/Projucer/Source/ComponentEditor/Documents/jucer_ButtonDocument.h +++ b/extras/Projucer/Source/ComponentEditor/Documents/jucer_ButtonDocument.h @@ -55,8 +55,8 @@ public: void addExtraClassProperties (PropertyPanel&); //============================================================================== - XmlElement* createXml() const; - bool loadFromXml (const XmlElement& xml); + std::unique_ptr createXml() const; + bool loadFromXml (const XmlElement&); void fillInGeneratedCode (GeneratedCode& code) const; void fillInPaintCode (GeneratedCode& code) const; diff --git a/extras/Projucer/Source/ComponentEditor/Documents/jucer_ComponentDocument.cpp b/extras/Projucer/Source/ComponentEditor/Documents/jucer_ComponentDocument.cpp index 3682eced86..8957300698 100644 --- a/extras/Projucer/Source/ComponentEditor/Documents/jucer_ComponentDocument.cpp +++ b/extras/Projucer/Source/ComponentEditor/Documents/jucer_ComponentDocument.cpp @@ -51,19 +51,17 @@ String ComponentDocument::getTypeName() const JucerDocument* ComponentDocument::createCopy() { - ComponentDocument* newOne = new ComponentDocument (cpp); + auto newOne = new ComponentDocument (cpp); newOne->resources = resources; - - std::unique_ptr xml (createXml()); - newOne->loadFromXml (*xml); + newOne->loadFromXml (*createXml()); return newOne; } -XmlElement* ComponentDocument::createXml() const +std::unique_ptr ComponentDocument::createXml() const { - XmlElement* const doc = JucerDocument::createXml(); + auto doc = JucerDocument::createXml(); doc->addChildElement (backgroundGraphics->createXml()); components->addToXml (*doc); diff --git a/extras/Projucer/Source/ComponentEditor/Documents/jucer_ComponentDocument.h b/extras/Projucer/Source/ComponentEditor/Documents/jucer_ComponentDocument.h index 4df2f956f0..abcf9e337d 100644 --- a/extras/Projucer/Source/ComponentEditor/Documents/jucer_ComponentDocument.h +++ b/extras/Projucer/Source/ComponentEditor/Documents/jucer_ComponentDocument.h @@ -48,7 +48,7 @@ public: ComponentLayout* getComponentLayout() const { return components.get(); } //============================================================================== - XmlElement* createXml() const; + std::unique_ptr createXml() const; bool loadFromXml (const XmlElement& xml); void fillInGeneratedCode (GeneratedCode& code) const; diff --git a/extras/Projucer/Source/ComponentEditor/jucer_JucerDocument.cpp b/extras/Projucer/Source/ComponentEditor/jucer_JucerDocument.cpp index e5a096e36d..137da8deee 100644 --- a/extras/Projucer/Source/ComponentEditor/jucer_JucerDocument.cpp +++ b/extras/Projucer/Source/ComponentEditor/jucer_JucerDocument.cpp @@ -322,9 +322,9 @@ void JucerDocument::addExtraClassProperties (PropertyPanel&) //============================================================================== const char* const JucerDocument::jucerCompXmlTag = "JUCER_COMPONENT"; -XmlElement* JucerDocument::createXml() const +std::unique_ptr JucerDocument::createXml() const { - XmlElement* doc = new XmlElement (jucerCompXmlTag); + auto doc = std::make_unique (jucerCompXmlTag); doc->setAttribute ("documentType", getTypeName()); doc->setAttribute ("className", className); diff --git a/extras/Projucer/Source/ComponentEditor/jucer_JucerDocument.h b/extras/Projucer/Source/ComponentEditor/jucer_JucerDocument.h index 7bbe60c674..15b8149583 100644 --- a/extras/Projucer/Source/ComponentEditor/jucer_JucerDocument.h +++ b/extras/Projucer/Source/ComponentEditor/jucer_JucerDocument.h @@ -149,7 +149,7 @@ protected: BinaryResources resources; - virtual XmlElement* createXml() const; + virtual std::unique_ptr createXml() const; virtual bool loadFromXml (const XmlElement&); virtual void fillInGeneratedCode (GeneratedCode&) const; diff --git a/modules/juce_audio_basics/sources/juce_ChannelRemappingAudioSource.cpp b/modules/juce_audio_basics/sources/juce_ChannelRemappingAudioSource.cpp index 3cec22131c..d5263ac55b 100644 --- a/modules/juce_audio_basics/sources/juce_ChannelRemappingAudioSource.cpp +++ b/modules/juce_audio_basics/sources/juce_ChannelRemappingAudioSource.cpp @@ -145,9 +145,9 @@ void ChannelRemappingAudioSource::getNextAudioBlock (const AudioSourceChannelInf } //============================================================================== -XmlElement* ChannelRemappingAudioSource::createXml() const +std::unique_ptr ChannelRemappingAudioSource::createXml() const { - XmlElement* e = new XmlElement ("MAPPINGS"); + auto e = std::make_unique ("MAPPINGS"); String ins, outs; const ScopedLock sl (lock); diff --git a/modules/juce_audio_basics/sources/juce_ChannelRemappingAudioSource.h b/modules/juce_audio_basics/sources/juce_ChannelRemappingAudioSource.h index 69761fafa5..928a20c558 100644 --- a/modules/juce_audio_basics/sources/juce_ChannelRemappingAudioSource.h +++ b/modules/juce_audio_basics/sources/juce_ChannelRemappingAudioSource.h @@ -112,7 +112,7 @@ public: /** Returns an XML object to encapsulate the state of the mappings. @see restoreFromXml */ - XmlElement* createXml() const; + std::unique_ptr createXml() const; /** Restores the mappings from an XML object created by createXML(). @see createXml diff --git a/modules/juce_audio_devices/audio_io/juce_AudioDeviceManager.cpp b/modules/juce_audio_devices/audio_io/juce_AudioDeviceManager.cpp index 7edbe713e6..a6fd50ee0d 100644 --- a/modules/juce_audio_devices/audio_io/juce_AudioDeviceManager.cpp +++ b/modules/juce_audio_devices/audio_io/juce_AudioDeviceManager.cpp @@ -139,12 +139,10 @@ void AudioDeviceManager::audioDeviceListChanged() { closeAudioDevice(); - std::unique_ptr e (createStateXml()); - - if (e == nullptr) - initialiseDefault (preferredDeviceName, ¤tSetup); - else + if (auto e = createStateXml()) initialiseFromXML (*e, true, preferredDeviceName, ¤tSetup); + else + initialiseDefault (preferredDeviceName, ¤tSetup); } if (currentAudioDevice != nullptr) @@ -344,9 +342,12 @@ void AudioDeviceManager::insertDefaultDeviceNames (AudioDeviceSetup& setup) cons } } -XmlElement* AudioDeviceManager::createStateXml() const +std::unique_ptr AudioDeviceManager::createStateXml() const { - return createCopyIfNotNull (lastExplicitSettings.get()); + if (lastExplicitSettings != nullptr) + return std::make_unique (*lastExplicitSettings); + + return {}; } //============================================================================== diff --git a/modules/juce_audio_devices/audio_io/juce_AudioDeviceManager.h b/modules/juce_audio_devices/audio_io/juce_AudioDeviceManager.h index 2f33f9c3d6..a253228167 100644 --- a/modules/juce_audio_devices/audio_io/juce_AudioDeviceManager.h +++ b/modules/juce_audio_devices/audio_io/juce_AudioDeviceManager.h @@ -197,7 +197,7 @@ public: Note that this can return a null pointer if no settings have been explicitly changed (i.e. if the device manager has just been left in its default state). */ - XmlElement* createStateXml() const; + std::unique_ptr createStateXml() const; //============================================================================== /** Returns the current device properties that are in use. diff --git a/modules/juce_audio_plugin_client/Standalone/juce_StandaloneFilterWindow.h b/modules/juce_audio_plugin_client/Standalone/juce_StandaloneFilterWindow.h index a5a6889d68..f92ea84115 100644 --- a/modules/juce_audio_plugin_client/Standalone/juce_StandaloneFilterWindow.h +++ b/modules/juce_audio_plugin_client/Standalone/juce_StandaloneFilterWindow.h @@ -296,7 +296,7 @@ public: { if (settings != nullptr) { - std::unique_ptr xml (deviceManager.createStateXml()); + auto xml = deviceManager.createStateXml(); settings->setValue ("audioSetup", xml.get()); diff --git a/modules/juce_audio_processors/processors/juce_PluginDescription.cpp b/modules/juce_audio_processors/processors/juce_PluginDescription.cpp index 6d885d722b..7acab70fc6 100644 --- a/modules/juce_audio_processors/processors/juce_PluginDescription.cpp +++ b/modules/juce_audio_processors/processors/juce_PluginDescription.cpp @@ -100,10 +100,12 @@ String PluginDescription::createIdentifierString() const return pluginFormatName + "-" + name + getPluginDescSuffix (*this); } -XmlElement* PluginDescription::createXml() const +std::unique_ptr PluginDescription::createXml() const { - XmlElement* const e = new XmlElement ("PLUGIN"); + auto e = std::make_unique ("PLUGIN"); + e->setAttribute ("name", name); + if (descriptiveName != name) e->setAttribute ("descriptiveName", descriptiveName); diff --git a/modules/juce_audio_processors/processors/juce_PluginDescription.h b/modules/juce_audio_processors/processors/juce_PluginDescription.h index bb7f8653dc..219c28c80a 100644 --- a/modules/juce_audio_processors/processors/juce_PluginDescription.h +++ b/modules/juce_audio_processors/processors/juce_PluginDescription.h @@ -140,7 +140,7 @@ public: @see loadFromXml */ - XmlElement* createXml() const; + std::unique_ptr createXml() const; /** Reloads the info in this structure from an XML record that was previously saved with createXML(). diff --git a/modules/juce_audio_processors/scanning/juce_KnownPluginList.cpp b/modules/juce_audio_processors/scanning/juce_KnownPluginList.cpp index ffa40b3f3f..07cbf268a1 100644 --- a/modules/juce_audio_processors/scanning/juce_KnownPluginList.cpp +++ b/modules/juce_audio_processors/scanning/juce_KnownPluginList.cpp @@ -319,15 +319,15 @@ void KnownPluginList::sort (const SortMethod method, bool forwards) } //============================================================================== -XmlElement* KnownPluginList::createXml() const +std::unique_ptr KnownPluginList::createXml() const { - auto e = new XmlElement ("KNOWNPLUGINS"); + auto e = std::make_unique ("KNOWNPLUGINS"); { ScopedLock lock (typesArrayLock); for (int i = types.size(); --i >= 0;) - e->prependChildElement (types.getUnchecked(i)->createXml()); + e->prependChildElement (types.getUnchecked(i)->createXml().release()); } for (auto& b : blacklist) diff --git a/modules/juce_audio_processors/scanning/juce_KnownPluginList.h b/modules/juce_audio_processors/scanning/juce_KnownPluginList.h index 13ca660892..7adf88162c 100644 --- a/modules/juce_audio_processors/scanning/juce_KnownPluginList.h +++ b/modules/juce_audio_processors/scanning/juce_KnownPluginList.h @@ -167,7 +167,7 @@ public: //============================================================================== /** Creates some XML that can be used to store the state of this list. */ - XmlElement* createXml() const; + std::unique_ptr createXml() const; /** Recreates the state of this list from its stored XML format. */ void recreateFromXml (const XmlElement& xml); diff --git a/modules/juce_gui_basics/commands/juce_KeyPressMappingSet.cpp b/modules/juce_gui_basics/commands/juce_KeyPressMappingSet.cpp index e4a98891b5..de6852e837 100644 --- a/modules/juce_gui_basics/commands/juce_KeyPressMappingSet.cpp +++ b/modules/juce_gui_basics/commands/juce_KeyPressMappingSet.cpp @@ -234,7 +234,7 @@ bool KeyPressMappingSet::restoreFromXml (const XmlElement& xmlVersion) if (commandId != 0) { - const KeyPress key (KeyPress::createFromDescription (map->getStringAttribute ("key"))); + auto key = KeyPress::createFromDescription (map->getStringAttribute ("key")); if (map->hasTagName ("MAPPING")) { @@ -242,9 +242,9 @@ bool KeyPressMappingSet::restoreFromXml (const XmlElement& xmlVersion) } else if (map->hasTagName ("UNMAPPING")) { - for (int i = mappings.size(); --i >= 0;) - if (mappings.getUnchecked(i)->commandID == commandId) - mappings.getUnchecked(i)->keypresses.removeAllInstancesOf (key); + for (auto& m : mappings) + if (m->commandID == commandId) + m->keypresses.removeAllInstancesOf (key); } } } @@ -255,30 +255,30 @@ bool KeyPressMappingSet::restoreFromXml (const XmlElement& xmlVersion) return false; } -XmlElement* KeyPressMappingSet::createXml (const bool saveDifferencesFromDefaultSet) const +std::unique_ptr KeyPressMappingSet::createXml (const bool saveDifferencesFromDefaultSet) const { std::unique_ptr defaultSet; if (saveDifferencesFromDefaultSet) { - defaultSet.reset (new KeyPressMappingSet (commandManager)); + defaultSet = std::make_unique (commandManager); defaultSet->resetToDefaultMappings(); } - XmlElement* const doc = new XmlElement ("KEYMAPPINGS"); + auto doc = std::make_unique ("KEYMAPPINGS"); doc->setAttribute ("basedOnDefaults", saveDifferencesFromDefaultSet); for (int i = 0; i < mappings.size(); ++i) { - const CommandMapping& cm = *mappings.getUnchecked(i); + auto& cm = *mappings.getUnchecked(i); for (int j = 0; j < cm.keypresses.size(); ++j) { if (defaultSet == nullptr || ! defaultSet->containsMapping (cm.commandID, cm.keypresses.getReference (j))) { - XmlElement* const map = doc->createNewChildElement ("MAPPING"); + auto map = doc->createNewChildElement ("MAPPING"); map->setAttribute ("commandId", String::toHexString ((int) cm.commandID)); map->setAttribute ("description", commandManager.getDescriptionOfCommand (cm.commandID)); @@ -291,13 +291,13 @@ XmlElement* KeyPressMappingSet::createXml (const bool saveDifferencesFromDefault { for (int i = 0; i < defaultSet->mappings.size(); ++i) { - const CommandMapping& cm = *defaultSet->mappings.getUnchecked(i); + auto& cm = *defaultSet->mappings.getUnchecked(i); for (int j = 0; j < cm.keypresses.size(); ++j) { if (! containsMapping (cm.commandID, cm.keypresses.getReference (j))) { - XmlElement* const map = doc->createNewChildElement ("UNMAPPING"); + auto map = doc->createNewChildElement ("UNMAPPING"); map->setAttribute ("commandId", String::toHexString ((int) cm.commandID)); map->setAttribute ("description", commandManager.getDescriptionOfCommand (cm.commandID)); diff --git a/modules/juce_gui_basics/commands/juce_KeyPressMappingSet.h b/modules/juce_gui_basics/commands/juce_KeyPressMappingSet.h index f4a0abe576..ff813ae0ca 100644 --- a/modules/juce_gui_basics/commands/juce_KeyPressMappingSet.h +++ b/modules/juce_gui_basics/commands/juce_KeyPressMappingSet.h @@ -206,7 +206,7 @@ public: @see restoreFromXml */ - XmlElement* createXml (bool saveDifferencesFromDefaultSet) const; + std::unique_ptr createXml (bool saveDifferencesFromDefaultSet) const; //============================================================================== /** @internal */