| @@ -354,7 +354,7 @@ static XmlElement* createNodeXml (AudioProcessorGraph::Node* const node) noexcep | |||||
| { | { | ||||
| PluginDescription pd; | PluginDescription pd; | ||||
| plugin->fillInPluginDescription (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<XmlElement> FilterGraph::createXml() const | |||||
| { | { | ||||
| auto* xml = new XmlElement ("FILTERGRAPH"); | |||||
| auto xml = std::make_unique<XmlElement> ("FILTERGRAPH"); | |||||
| for (auto* node : graph.getNodes()) | for (auto* node : graph.getNodes()) | ||||
| xml->addChildElement (createNodeXml (node)); | xml->addChildElement (createNodeXml (node)); | ||||
| @@ -64,8 +64,8 @@ public: | |||||
| void audioProcessorChanged (AudioProcessor*) override { changed(); } | void audioProcessorChanged (AudioProcessor*) override { changed(); } | ||||
| //============================================================================== | //============================================================================== | ||||
| XmlElement* createXml() const; | |||||
| void restoreFromXml (const XmlElement& xml); | |||||
| std::unique_ptr<XmlElement> createXml() const; | |||||
| void restoreFromXml (const XmlElement&); | |||||
| static const char* getFilenameSuffix() { return ".filtergraph"; } | static const char* getFilenameSuffix() { return ".filtergraph"; } | ||||
| static const char* getFilenameWildcard() { return "*.filtergraph"; } | static const char* getFilenameWildcard() { return "*.filtergraph"; } | ||||
| @@ -574,7 +574,7 @@ void MainHostWindow::showAudioSettings() | |||||
| ModalCallbackFunction::create | ModalCallbackFunction::create | ||||
| ([safeThis] (int) | ([safeThis] (int) | ||||
| { | { | ||||
| std::unique_ptr<XmlElement> audioState (safeThis->deviceManager.createStateXml()); | |||||
| auto audioState = safeThis->deviceManager.createStateXml(); | |||||
| getAppProperties().getUserSettings()->setValue ("audioDeviceState", audioState.get()); | getAppProperties().getUserSettings()->setValue ("audioDeviceState", audioState.get()); | ||||
| getAppProperties().getUserSettings()->saveIfNeeded(); | getAppProperties().getUserSettings()->saveIfNeeded(); | ||||
| @@ -423,9 +423,9 @@ static void saveDocList (const Array <OpenDocumentManager::Document*>& list, Xml | |||||
| } | } | ||||
| } | } | ||||
| XmlElement* RecentDocumentList::createXML() const | |||||
| std::unique_ptr<XmlElement> RecentDocumentList::createXML() const | |||||
| { | { | ||||
| XmlElement* xml = new XmlElement ("RECENT_DOCUMENTS"); | |||||
| auto xml = std::make_unique<XmlElement> ("RECENT_DOCUMENTS"); | |||||
| saveDocList (previousDocs, *xml->createNewChildElement ("PREVIOUS")); | saveDocList (previousDocs, *xml->createNewChildElement ("PREVIOUS")); | ||||
| saveDocList (nextDocs, *xml->createNewChildElement ("NEXT")); | saveDocList (nextDocs, *xml->createNewChildElement ("NEXT")); | ||||
| @@ -142,7 +142,7 @@ public: | |||||
| OpenDocumentManager::Document* getClosestPreviousDocOtherThan (OpenDocumentManager::Document* oneToAvoid) const; | OpenDocumentManager::Document* getClosestPreviousDocOtherThan (OpenDocumentManager::Document* oneToAvoid) const; | ||||
| void restoreFromXML (Project& project, const XmlElement& xml); | void restoreFromXML (Project& project, const XmlElement& xml); | ||||
| XmlElement* createXML() const; | |||||
| std::unique_ptr<XmlElement> createXML() const; | |||||
| private: | private: | ||||
| bool documentAboutToClose (OpenDocumentManager::Document*); | bool documentAboutToClose (OpenDocumentManager::Document*); | ||||
| @@ -60,7 +60,7 @@ public: | |||||
| e->setAttribute ("initialTab", t->getCurrentTabIndex()); | e->setAttribute ("initialTab", t->getCurrentTabIndex()); | ||||
| for (int i = 0; i < t->getNumTabs(); ++i) | for (int i = 0; i < t->getNumTabs(); ++i) | ||||
| e->addChildElement (getTabState (t, i)); | |||||
| e->addChildElement (getTabState (t, i).release()); | |||||
| return e; | return e; | ||||
| } | } | ||||
| @@ -228,9 +228,9 @@ public: | |||||
| } | } | ||||
| //============================================================================== | //============================================================================== | ||||
| static XmlElement* getTabState (TabbedComponent* tc, int tabIndex) | |||||
| static std::unique_ptr<XmlElement> getTabState (TabbedComponent* tc, int tabIndex) | |||||
| { | { | ||||
| XmlElement* xml = new XmlElement ("TAB"); | |||||
| auto xml = std::make_unique<XmlElement> ("TAB"); | |||||
| xml->setAttribute ("name", tc->getTabNames() [tabIndex]); | xml->setAttribute ("name", tc->getTabNames() [tabIndex]); | ||||
| xml->setAttribute ("colour", tc->getTabBackgroundColour (tabIndex).toString()); | xml->setAttribute ("colour", tc->getTabBackgroundColour (tabIndex).toString()); | ||||
| @@ -698,7 +698,7 @@ private: | |||||
| : ComponentUndoableAction<TabbedComponent> (comp, l), | : ComponentUndoableAction<TabbedComponent> (comp, l), | ||||
| indexToRemove (indexToRemove_) | indexToRemove (indexToRemove_) | ||||
| { | { | ||||
| previousState.reset (getTabState (comp, indexToRemove)); | |||||
| previousState = getTabState (comp, indexToRemove); | |||||
| } | } | ||||
| bool perform() | bool perform() | ||||
| @@ -1164,7 +1164,7 @@ private: | |||||
| { | { | ||||
| showCorrectTab(); | showCorrectTab(); | ||||
| std::unique_ptr<XmlElement> state (getTabState (getComponent(), from)); | |||||
| auto state = getTabState (getComponent(), from); | |||||
| getComponent()->removeTab (from); | getComponent()->removeTab (from); | ||||
| addNewTab (getComponent(), to); | addNewTab (getComponent(), to); | ||||
| @@ -165,22 +165,19 @@ String ButtonDocument::getTypeName() const | |||||
| JucerDocument* ButtonDocument::createCopy() | JucerDocument* ButtonDocument::createCopy() | ||||
| { | { | ||||
| ButtonDocument* newOne = new ButtonDocument (cpp); | |||||
| auto newOne = new ButtonDocument (cpp); | |||||
| newOne->resources = resources; | newOne->resources = resources; | ||||
| std::unique_ptr<XmlElement> xml (createXml()); | |||||
| newOne->loadFromXml (*xml); | |||||
| newOne->loadFromXml (*createXml()); | |||||
| return newOne; | return newOne; | ||||
| } | } | ||||
| XmlElement* ButtonDocument::createXml() const | |||||
| std::unique_ptr<XmlElement> ButtonDocument::createXml() const | |||||
| { | { | ||||
| XmlElement* const doc = JucerDocument::createXml(); | |||||
| auto doc = JucerDocument::createXml(); | |||||
| for (int i = 0; i < 7; ++i) | for (int i = 0; i < 7; ++i) | ||||
| { | { | ||||
| XmlElement* e = paintRoutines [i]->createXml(); | |||||
| auto e = paintRoutines[i]->createXml(); | |||||
| e->setAttribute ("buttonState", stateNames [i]); | e->setAttribute ("buttonState", stateNames [i]); | ||||
| e->setAttribute ("enabled", paintStatesEnabled [i]); | e->setAttribute ("enabled", paintStatesEnabled [i]); | ||||
| @@ -55,8 +55,8 @@ public: | |||||
| void addExtraClassProperties (PropertyPanel&); | void addExtraClassProperties (PropertyPanel&); | ||||
| //============================================================================== | //============================================================================== | ||||
| XmlElement* createXml() const; | |||||
| bool loadFromXml (const XmlElement& xml); | |||||
| std::unique_ptr<XmlElement> createXml() const; | |||||
| bool loadFromXml (const XmlElement&); | |||||
| void fillInGeneratedCode (GeneratedCode& code) const; | void fillInGeneratedCode (GeneratedCode& code) const; | ||||
| void fillInPaintCode (GeneratedCode& code) const; | void fillInPaintCode (GeneratedCode& code) const; | ||||
| @@ -51,19 +51,17 @@ String ComponentDocument::getTypeName() const | |||||
| JucerDocument* ComponentDocument::createCopy() | JucerDocument* ComponentDocument::createCopy() | ||||
| { | { | ||||
| ComponentDocument* newOne = new ComponentDocument (cpp); | |||||
| auto newOne = new ComponentDocument (cpp); | |||||
| newOne->resources = resources; | newOne->resources = resources; | ||||
| std::unique_ptr<XmlElement> xml (createXml()); | |||||
| newOne->loadFromXml (*xml); | |||||
| newOne->loadFromXml (*createXml()); | |||||
| return newOne; | return newOne; | ||||
| } | } | ||||
| XmlElement* ComponentDocument::createXml() const | |||||
| std::unique_ptr<XmlElement> ComponentDocument::createXml() const | |||||
| { | { | ||||
| XmlElement* const doc = JucerDocument::createXml(); | |||||
| auto doc = JucerDocument::createXml(); | |||||
| doc->addChildElement (backgroundGraphics->createXml()); | doc->addChildElement (backgroundGraphics->createXml()); | ||||
| components->addToXml (*doc); | components->addToXml (*doc); | ||||
| @@ -48,7 +48,7 @@ public: | |||||
| ComponentLayout* getComponentLayout() const { return components.get(); } | ComponentLayout* getComponentLayout() const { return components.get(); } | ||||
| //============================================================================== | //============================================================================== | ||||
| XmlElement* createXml() const; | |||||
| std::unique_ptr<XmlElement> createXml() const; | |||||
| bool loadFromXml (const XmlElement& xml); | bool loadFromXml (const XmlElement& xml); | ||||
| void fillInGeneratedCode (GeneratedCode& code) const; | void fillInGeneratedCode (GeneratedCode& code) const; | ||||
| @@ -322,9 +322,9 @@ void JucerDocument::addExtraClassProperties (PropertyPanel&) | |||||
| //============================================================================== | //============================================================================== | ||||
| const char* const JucerDocument::jucerCompXmlTag = "JUCER_COMPONENT"; | const char* const JucerDocument::jucerCompXmlTag = "JUCER_COMPONENT"; | ||||
| XmlElement* JucerDocument::createXml() const | |||||
| std::unique_ptr<XmlElement> JucerDocument::createXml() const | |||||
| { | { | ||||
| XmlElement* doc = new XmlElement (jucerCompXmlTag); | |||||
| auto doc = std::make_unique<XmlElement> (jucerCompXmlTag); | |||||
| doc->setAttribute ("documentType", getTypeName()); | doc->setAttribute ("documentType", getTypeName()); | ||||
| doc->setAttribute ("className", className); | doc->setAttribute ("className", className); | ||||
| @@ -149,7 +149,7 @@ protected: | |||||
| BinaryResources resources; | BinaryResources resources; | ||||
| virtual XmlElement* createXml() const; | |||||
| virtual std::unique_ptr<XmlElement> createXml() const; | |||||
| virtual bool loadFromXml (const XmlElement&); | virtual bool loadFromXml (const XmlElement&); | ||||
| virtual void fillInGeneratedCode (GeneratedCode&) const; | virtual void fillInGeneratedCode (GeneratedCode&) const; | ||||
| @@ -145,9 +145,9 @@ void ChannelRemappingAudioSource::getNextAudioBlock (const AudioSourceChannelInf | |||||
| } | } | ||||
| //============================================================================== | //============================================================================== | ||||
| XmlElement* ChannelRemappingAudioSource::createXml() const | |||||
| std::unique_ptr<XmlElement> ChannelRemappingAudioSource::createXml() const | |||||
| { | { | ||||
| XmlElement* e = new XmlElement ("MAPPINGS"); | |||||
| auto e = std::make_unique<XmlElement> ("MAPPINGS"); | |||||
| String ins, outs; | String ins, outs; | ||||
| const ScopedLock sl (lock); | const ScopedLock sl (lock); | ||||
| @@ -112,7 +112,7 @@ public: | |||||
| /** Returns an XML object to encapsulate the state of the mappings. | /** Returns an XML object to encapsulate the state of the mappings. | ||||
| @see restoreFromXml | @see restoreFromXml | ||||
| */ | */ | ||||
| XmlElement* createXml() const; | |||||
| std::unique_ptr<XmlElement> createXml() const; | |||||
| /** Restores the mappings from an XML object created by createXML(). | /** Restores the mappings from an XML object created by createXML(). | ||||
| @see createXml | @see createXml | ||||
| @@ -139,12 +139,10 @@ void AudioDeviceManager::audioDeviceListChanged() | |||||
| { | { | ||||
| closeAudioDevice(); | closeAudioDevice(); | ||||
| std::unique_ptr<XmlElement> e (createStateXml()); | |||||
| if (e == nullptr) | |||||
| initialiseDefault (preferredDeviceName, ¤tSetup); | |||||
| else | |||||
| if (auto e = createStateXml()) | |||||
| initialiseFromXML (*e, true, preferredDeviceName, ¤tSetup); | initialiseFromXML (*e, true, preferredDeviceName, ¤tSetup); | ||||
| else | |||||
| initialiseDefault (preferredDeviceName, ¤tSetup); | |||||
| } | } | ||||
| if (currentAudioDevice != nullptr) | if (currentAudioDevice != nullptr) | ||||
| @@ -344,9 +342,12 @@ void AudioDeviceManager::insertDefaultDeviceNames (AudioDeviceSetup& setup) cons | |||||
| } | } | ||||
| } | } | ||||
| XmlElement* AudioDeviceManager::createStateXml() const | |||||
| std::unique_ptr<XmlElement> AudioDeviceManager::createStateXml() const | |||||
| { | { | ||||
| return createCopyIfNotNull (lastExplicitSettings.get()); | |||||
| if (lastExplicitSettings != nullptr) | |||||
| return std::make_unique<XmlElement> (*lastExplicitSettings); | |||||
| return {}; | |||||
| } | } | ||||
| //============================================================================== | //============================================================================== | ||||
| @@ -197,7 +197,7 @@ public: | |||||
| Note that this can return a null pointer if no settings have been explicitly changed | 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). | (i.e. if the device manager has just been left in its default state). | ||||
| */ | */ | ||||
| XmlElement* createStateXml() const; | |||||
| std::unique_ptr<XmlElement> createStateXml() const; | |||||
| //============================================================================== | //============================================================================== | ||||
| /** Returns the current device properties that are in use. | /** Returns the current device properties that are in use. | ||||
| @@ -296,7 +296,7 @@ public: | |||||
| { | { | ||||
| if (settings != nullptr) | if (settings != nullptr) | ||||
| { | { | ||||
| std::unique_ptr<XmlElement> xml (deviceManager.createStateXml()); | |||||
| auto xml = deviceManager.createStateXml(); | |||||
| settings->setValue ("audioSetup", xml.get()); | settings->setValue ("audioSetup", xml.get()); | ||||
| @@ -100,10 +100,12 @@ String PluginDescription::createIdentifierString() const | |||||
| return pluginFormatName + "-" + name + getPluginDescSuffix (*this); | return pluginFormatName + "-" + name + getPluginDescSuffix (*this); | ||||
| } | } | ||||
| XmlElement* PluginDescription::createXml() const | |||||
| std::unique_ptr<XmlElement> PluginDescription::createXml() const | |||||
| { | { | ||||
| XmlElement* const e = new XmlElement ("PLUGIN"); | |||||
| auto e = std::make_unique<XmlElement> ("PLUGIN"); | |||||
| e->setAttribute ("name", name); | e->setAttribute ("name", name); | ||||
| if (descriptiveName != name) | if (descriptiveName != name) | ||||
| e->setAttribute ("descriptiveName", descriptiveName); | e->setAttribute ("descriptiveName", descriptiveName); | ||||
| @@ -140,7 +140,7 @@ public: | |||||
| @see loadFromXml | @see loadFromXml | ||||
| */ | */ | ||||
| XmlElement* createXml() const; | |||||
| std::unique_ptr<XmlElement> createXml() const; | |||||
| /** Reloads the info in this structure from an XML record that was previously | /** Reloads the info in this structure from an XML record that was previously | ||||
| saved with createXML(). | saved with createXML(). | ||||
| @@ -319,15 +319,15 @@ void KnownPluginList::sort (const SortMethod method, bool forwards) | |||||
| } | } | ||||
| //============================================================================== | //============================================================================== | ||||
| XmlElement* KnownPluginList::createXml() const | |||||
| std::unique_ptr<XmlElement> KnownPluginList::createXml() const | |||||
| { | { | ||||
| auto e = new XmlElement ("KNOWNPLUGINS"); | |||||
| auto e = std::make_unique<XmlElement> ("KNOWNPLUGINS"); | |||||
| { | { | ||||
| ScopedLock lock (typesArrayLock); | ScopedLock lock (typesArrayLock); | ||||
| for (int i = types.size(); --i >= 0;) | for (int i = types.size(); --i >= 0;) | ||||
| e->prependChildElement (types.getUnchecked(i)->createXml()); | |||||
| e->prependChildElement (types.getUnchecked(i)->createXml().release()); | |||||
| } | } | ||||
| for (auto& b : blacklist) | for (auto& b : blacklist) | ||||
| @@ -167,7 +167,7 @@ public: | |||||
| //============================================================================== | //============================================================================== | ||||
| /** Creates some XML that can be used to store the state of this list. */ | /** Creates some XML that can be used to store the state of this list. */ | ||||
| XmlElement* createXml() const; | |||||
| std::unique_ptr<XmlElement> createXml() const; | |||||
| /** Recreates the state of this list from its stored XML format. */ | /** Recreates the state of this list from its stored XML format. */ | ||||
| void recreateFromXml (const XmlElement& xml); | void recreateFromXml (const XmlElement& xml); | ||||
| @@ -234,7 +234,7 @@ bool KeyPressMappingSet::restoreFromXml (const XmlElement& xmlVersion) | |||||
| if (commandId != 0) | if (commandId != 0) | ||||
| { | { | ||||
| const KeyPress key (KeyPress::createFromDescription (map->getStringAttribute ("key"))); | |||||
| auto key = KeyPress::createFromDescription (map->getStringAttribute ("key")); | |||||
| if (map->hasTagName ("MAPPING")) | if (map->hasTagName ("MAPPING")) | ||||
| { | { | ||||
| @@ -242,9 +242,9 @@ bool KeyPressMappingSet::restoreFromXml (const XmlElement& xmlVersion) | |||||
| } | } | ||||
| else if (map->hasTagName ("UNMAPPING")) | 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; | return false; | ||||
| } | } | ||||
| XmlElement* KeyPressMappingSet::createXml (const bool saveDifferencesFromDefaultSet) const | |||||
| std::unique_ptr<XmlElement> KeyPressMappingSet::createXml (const bool saveDifferencesFromDefaultSet) const | |||||
| { | { | ||||
| std::unique_ptr<KeyPressMappingSet> defaultSet; | std::unique_ptr<KeyPressMappingSet> defaultSet; | ||||
| if (saveDifferencesFromDefaultSet) | if (saveDifferencesFromDefaultSet) | ||||
| { | { | ||||
| defaultSet.reset (new KeyPressMappingSet (commandManager)); | |||||
| defaultSet = std::make_unique<KeyPressMappingSet> (commandManager); | |||||
| defaultSet->resetToDefaultMappings(); | defaultSet->resetToDefaultMappings(); | ||||
| } | } | ||||
| XmlElement* const doc = new XmlElement ("KEYMAPPINGS"); | |||||
| auto doc = std::make_unique<XmlElement> ("KEYMAPPINGS"); | |||||
| doc->setAttribute ("basedOnDefaults", saveDifferencesFromDefaultSet); | doc->setAttribute ("basedOnDefaults", saveDifferencesFromDefaultSet); | ||||
| for (int i = 0; i < mappings.size(); ++i) | 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) | for (int j = 0; j < cm.keypresses.size(); ++j) | ||||
| { | { | ||||
| if (defaultSet == nullptr | if (defaultSet == nullptr | ||||
| || ! defaultSet->containsMapping (cm.commandID, cm.keypresses.getReference (j))) | || ! 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 ("commandId", String::toHexString ((int) cm.commandID)); | ||||
| map->setAttribute ("description", commandManager.getDescriptionOfCommand (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) | 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) | for (int j = 0; j < cm.keypresses.size(); ++j) | ||||
| { | { | ||||
| if (! containsMapping (cm.commandID, cm.keypresses.getReference (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 ("commandId", String::toHexString ((int) cm.commandID)); | ||||
| map->setAttribute ("description", commandManager.getDescriptionOfCommand (cm.commandID)); | map->setAttribute ("description", commandManager.getDescriptionOfCommand (cm.commandID)); | ||||
| @@ -206,7 +206,7 @@ public: | |||||
| @see restoreFromXml | @see restoreFromXml | ||||
| */ | */ | ||||
| XmlElement* createXml (bool saveDifferencesFromDefaultSet) const; | |||||
| std::unique_ptr<XmlElement> createXml (bool saveDifferencesFromDefaultSet) const; | |||||
| //============================================================================== | //============================================================================== | ||||
| /** @internal */ | /** @internal */ | ||||