char *findRelease(struct raRecord *record, struct raLevel *level) /* Find release tag in self or parent track at this level. */ { while (record != NULL) { struct raTag *releaseTag = raRecordFindTag(record, "release"); if (releaseTag != NULL) return releaseTag->val; struct raTag *parentTag = raRecordFindTag(record, glParentField); if (parentTag != NULL) record = findClosestParent(level, record, parentTag->val); else record = NULL; } return NULL; }
void qml_node::resetNode() { if(m_was_destroyed) return; m_node.clear(); nodeChanged(m_node); const bool reading = m_device ? m_device->readPreset() : false; reset_parent(); // Creation may not have finished yet. if (m_parentNode && !m_parentNode->ossiaNode()) { m_parentNode->resetNode(); } if (m_device) { // Utility function to set-up a node. auto setup_valid_node = [&] { m_ossia_node->about_to_be_deleted .connect<&qml_node::on_node_deleted>(this); m_node = QString::fromStdString(m_ossia_node->get_name()); nodeChanged(m_node); setPath(QString::fromStdString( ossia::net::address_string_from_node(*m_ossia_node))); applyNodeAttributes(); }; std::string node_name; bool relative = false; // Naming logic if (m_userRequestedNode.isEmpty()) { if (auto par = this->parent()) { node_name = par->objectName().toStdString(); if (node_name.empty()) node_name = par->metaObject()->className(); } if (node_name.empty()) node_name = "Object"; relative = true; } else if (m_userRequestedNode[0] != '/') { relative = true; node_name = m_userRequestedNode.toStdString(); } else if (m_userRequestedNode == QStringLiteral("/")) { m_ossia_node = &m_device->device().get_root_node(); setup_valid_node(); return; } else { node_name = m_userRequestedNode.toStdString(); } // Find the node auto get_parent = [&]() -> ossia::net::node_base& { if (m_parentNode && m_parentNode->ossiaNode()) return *m_parentNode->ossiaNode(); if (relative) { return findClosestParent( this->parent(), m_device->device().get_root_node()); } else { return m_device->device().get_root_node(); } }; ossia::net::node_base& parent = get_parent(); if (reading) { m_ossia_node = ossia::net::find_node(parent, node_name); if (m_ossia_node) { setup_valid_node(); } else { setPath({}); } } else { m_ossia_node = &ossia::net::create_node(parent, node_name); setup_valid_node(); } return; } // In case something went wrong... setPath({}); }