void ThermoPhase::initThermoXML(XML_Node& phaseNode, const std::string& id) { if (phaseNode.hasChild("state")) { setStateFromXML(phaseNode.child("state")); } xMol_Ref.resize(m_kk); getMoleFractions(&xMol_Ref[0]); }
// set state, including the view status, from a binary blob stored in host. // void MLPluginProcessor::setStateFromBlob (const void* data, int sizeInBytes) { debug() << "setStateFromBlob: " << sizeInBytes << "bytes of XML data.\n"; XmlElementPtr xmlState(getXmlFromBinary (data, sizeInBytes)); if (xmlState) { bool setViewAttributes = true; setStateFromXML(*xmlState, setViewAttributes); mpLatestStateLoaded = xmlState; } }
void MLPluginProcessor::setStateFromText (const String& stateStr) { XmlDocument doc(stateStr); XmlElementPtr xmlState (doc.getDocumentElement()); if (xmlState) { bool setViewAttributes = false; setStateFromXML(*xmlState, setViewAttributes); mpLatestStateLoaded = xmlState; } }
void MLPluginProcessor::returnToLatestStateLoaded() { if(mpLatestStateLoaded) { bool setViewAttributes = false; setStateFromXML(*mpLatestStateLoaded, setViewAttributes); } else { debug() << "MLPluginProcessor::returnToLatestStateLoaded: no saved state!\n"; } }
void MLPluginProcessor::loadStateFromFile(const File& f) { if (f.exists()) { String extension = f.getFileExtension(); if (extension == ".mlpreset") { // load cross-platform mlpreset file. ScopedPointer<XmlDocument> stateToLoad (new XmlDocument(f)); if (stateToLoad != NULL) { XmlElementPtr pDocElem (stateToLoad->getDocumentElement(true)); setStateFromXML(*pDocElem, false); mpLatestStateLoaded = pDocElem; } } else if (extension == ".aupreset") { // tell AU wrapper to load AU-compatible .aupreset file. sendMessageToMLListener (MLAudioProcessorListener::kLoad, f); } } }
void MLPluginProcessor::setPatchStateFromText (const String& stateStr) { const String& trimmedState = stateStr.trimStart(); if(trimmedState[0] == '{') { // assume JSON cJSON* root = cJSON_Parse(trimmedState.toUTF8()); if(root) { mpPatchState->setStateFromJSON(root); cJSON_Delete(root); } else { debug() << "MLPluginProcessor::setPatchStateFromText: couldn't create JSON object!\n"; } } else if (trimmedState[0] == '<') { // assume XML ScopedPointer<XmlDocument> stateToLoad (new XmlDocument(trimmedState)); if (stateToLoad != NULL) { XmlElementPtr pDocElem (stateToLoad->getDocumentElement(true)); setStateFromXML(*pDocElem, false); } else { debug() << "MLPluginProcessor::setPatchStateFromText: couldn't create XML object!\n"; } } else { debug() << "MLPluginProcessor::setPatchStateFromText: unknown format for .mlpreset file!\n"; } updateChangedProperties(); }
// set Processor and Environment states from XML or JSON in binary. // state is in JSON format. XML can be read for backwards compatibility.. // void MLPluginProcessor::setPatchAndEnvStatesFromBinary (const void* data, int sizeInBytes) { // first try getting XML from binary- this will fail if blob is not in XML format XmlElementPtr xmlState(getXmlFromBinary (data, sizeInBytes)); if (xmlState) { bool setViewAttributes = true; setStateFromXML(*xmlState, setViewAttributes); } else { // TODO uncompress here std::string stateStr (static_cast<const char *>(data), sizeInBytes); // trim starting whitespace const char * pStart = stateStr.data(); const char * pTrimmedStart = pStart; while(isspace(*pTrimmedStart) && (pTrimmedStart - pStart < sizeInBytes)) { pTrimmedStart++; } // assume JSON bool OK = true; cJSON* root = cJSON_Parse(pTrimmedStart); if(root) { cJSON* patchState = cJSON_GetObjectItem(root, "patch"); if(patchState) { mpPatchState->setStateFromJSON(patchState); } else { OK = false; } cJSON* environmentState = cJSON_GetObjectItem(root, "environment"); if(environmentState) { mpEnvironmentState->setStateFromJSON(environmentState); } else { OK = false; } cJSON_Delete(root); } if(!OK) { // TODO notify user in release debug() << "MLPluginProcessor::setPatchAndEnvStatesFromBinary: couldn't load JSON!\n"; } } // push state for access by "Revert To saved" mpPatchState->clearStateStack(); mpPatchState->pushStateToStack(); }