ObjectComponent* ObjController::addObject(ObjectsHolder* holder, ValueTree objValues, int index, bool undoable) { if(undoable) { AddObjectAction* action = new AddObjectAction(this, objValues, holder); owner.getUndoManager().perform(action, "Add new Object"); return objects[action->indexAdded]; } else { const Identifier& groupName = ObjectsHelper::getObjectGroup(objValues.getType().toString()); ValueTree mdl = owner.getMDLTree(); ValueTree subTree = mdl.getOrCreateChildWithName(groupName, nullptr); subTree.addChild(objValues,-1, nullptr); idMgr->addId(objValues.getType(), objValues[Ids::identifier].toString(), nullptr); ObjectComponent* objComp = new ObjectComponent(*this, objValues); objects.insert(index, objComp); holder->addAndMakeVisible(objComp); changed(); return objComp; } return 0; }
void ObjController::removeLink(LinkComponent* linkComp, bool undoable, ObjectsHolder* holder) { if (undoable) { owner.getUndoManager().perform(new RemoveLinkAction(holder, linkComp, this)); } else { sObjects.deselect(linkComp); sObjects.changed(true); Array<int> aoIndices = checkIfObjectHasAudioConnections(linkComp->getData()); for(int i = aoIndices.size(); --i >= 0;) { removeAudioConnection(getAudioConnector(aoIndices[i]), true, holder); } const Identifier& groupName = ObjectsHelper::getObjectGroup(linkComp->getData().getType()); ValueTree mdl = owner.getMDLTree(); ValueTree subTree = mdl.getOrCreateChildWithName(groupName, nullptr); idMgr->removeId(linkComp->getData().getType(), linkComp->getData()[Ids::identifier].toString(), nullptr); subTree.removeChild(linkComp->getData(), nullptr); links.removeObject(linkComp); } }
bool MDLHelper::addOutputDSPVarIfNotExists(const MDLFile& mdlFile) { ValueTree mdlRoot = mdlFile.getMDLRoot(); bool outputDSPExists = false; ValueTree fcb = mdlRoot.getOrCreateChildWithName(Objects::faustcodeblock, nullptr); for (int i = 0; i < fcb.getNumChildren(); ++i) { ValueTree fc = fcb.getChild(i); if (fc.hasProperty(Ids::value)) { String fcStr = fc[Ids::value].toString(); if (fcStr.startsWith("outputDSP")) { outputDSPExists = true; break; } } } if (!outputDSPExists) { ValueTree fc(Ids::faustcode); fc.setProperty(Ids::value, "outputDSP=SAMlimiter:highpass(4,20.0);", nullptr); fcb.addChild(fc, -1, nullptr); return true; } return false; }
void ObjController::removeComment(CommentComponent* commentComp, bool undoable, ObjectsHolder* holder) { if(undoable) { owner.getUndoManager().perform(new RemoveCommentAction(holder, commentComp, this)); } else { sObjects.deselect(commentComp); sObjects.changed(true); const Identifier& groupName = ObjectsHelper::getObjectGroup(commentComp->getData().getType()); ValueTree mdl = owner.getMDLTree(); ValueTree subTree = mdl.getOrCreateChildWithName(groupName, nullptr); idMgr->removeId(commentComp->getData().getType(), commentComp->getData()[Ids::identifier].toString(), nullptr); subTree.removeChild(commentComp->getData(), nullptr); comments.removeObject(commentComp); } }
void ObjController::removeObject(ObjectComponent* objComp, bool undoable, ObjectsHolder* holder) { if (undoable) { owner.getUndoManager().perform(new RemoveObjectAction(holder, objComp, this)); } else { sObjects.deselect(objComp); sObjects.changed(true); // Get link indices attached to this object and remove them. // TODO needs better solution Array<int> lIndices = checkIfObjectHasLinks(objComp->getData()); // if(indices.size() > 0) // sObjects.deselectAll(); for(int i = lIndices.size(); --i >= 0;) { removeLink(getLink(lIndices[i]), true, holder); } Array<int> aoIndices = checkIfObjectHasAudioConnections(objComp->getData()); for(int i = aoIndices.size(); --i >= 0;) { // remove audioouts attached to this object only if this is not an audioout bool isAudioOut = objComp->getData().getType() == Ids::audioout; removeAudioConnection(getAudioConnector(aoIndices[i]), !isAudioOut, holder); } const Identifier& groupName = ObjectsHelper::getObjectGroup(objComp->getData().getType()); ValueTree mdl = owner.getMDLTree(); ValueTree subTree = mdl.getOrCreateChildWithName(groupName, nullptr); idMgr->removeId(objComp->getData().getType(), objComp->getData()[Ids::identifier].toString(), nullptr); subTree.removeChild(objComp->getData(), nullptr); objects.removeObject(objComp); } }
void MDLParser::addTree(ValueTree& rootTree, const ValueTree& newTree) { const Identifier& groupId = ObjectsHelper::getObjectGroup(newTree.getType()); ValueTree group = rootTree.getOrCreateChildWithName(groupId, nullptr); group.addChild(newTree, -1, nullptr); }