void CtrlrMIDIDevice::restoreState(const ValueTree &savedState) { for (int i=0; i<savedState.getNumProperties(); i++) { deviceTree.setProperty (savedState.getPropertyName(i), savedState.getProperty(savedState.getPropertyName(i)), 0); } }
void CtrlrPanelComponentProperties::copyProperties(ValueTree &sourceTree, ValueTree &destinationTree) { for (int i=0; i<sourceTree.getNumProperties(); i++) { if (!destinationTree.hasProperty (sourceTree.getPropertyName(i))) { if (sourceTree.getPropertyName(i) != Ids::vstIndex) destinationTree.setProperty (sourceTree.getPropertyName(i), sourceTree.getPropertyAsValue(sourceTree.getPropertyName(i), 0), 0); } } }
void Project::sanitiseConfigFlags() { ValueTree configNode (getConfigNode()); for (int i = configNode.getNumProperties(); --i >= 0;) { const var value (configNode [configNode.getPropertyName(i)]); if (value != configFlagEnabled && value != configFlagDisabled) configNode.removeProperty (configNode.getPropertyName(i), getUndoManagerFor (configNode)); } }
void CtrlrPanelCanvas::replaceComponent (CtrlrModulator &modulator, const String &targetComponentType) { CtrlrComponent *oldComponent = modulator.getComponent(); CtrlrComponent *newComponent = nullptr; /* detach the existing component so it doesn't get notified about anything, the pointer will be invalid */ if (getOwner().getSelection()) { getOwner().getSelection()->deselectAll(); getOwner().getSelection()->dispatchPendingMessages(); getOwner().getSelection()->removeChangeListener(oldComponent); } if (oldComponent) { /* keep a copy of the old properties, we need to find out if the component is in a group */ ValueTree oldComponentProperties = oldComponent->getObjectTree().createCopy(); modulator.setComponentType(targetComponentType, false); /* get the new component pointer and attach it */ newComponent = modulator.getComponent(); if (getOwner().getSelection()) getOwner().getSelection()->addChangeListener (newComponent); addAndMakeVisibleNg (modulator.getComponent(), nullptr, true); /* attach the new component to any group components the old component was int */ if (oldComponentProperties.hasProperty(Ids::componentGroupName)) { CtrlrGroup *group = dynamic_cast<CtrlrGroup*>(owner.getOwner().getComponent(oldComponentProperties.getProperty(Ids::componentGroupName))); if (group) { group->setOwned (newComponent, true); } } if (oldComponentProperties.hasProperty(Ids::componentTabName)) { CtrlrTabsComponent *tabs = dynamic_cast<CtrlrTabsComponent*>(owner.getOwner().getComponent(oldComponentProperties.getProperty(Ids::componentTabName))); if (tabs) { tabs->setOwned (newComponent, oldComponentProperties.getProperty(Ids::componentTabId), true); } } /* copy any old properties to the new component */ for (int i=0; i<oldComponentProperties.getNumProperties(); i++) { const Identifier propName = oldComponentProperties.getPropertyName(i); const var propValue = oldComponentProperties.getProperty(propName); if (propName != Ids::uiType) { if (newComponent->getObjectTree().hasProperty(propName)) newComponent->setProperty (propName, propValue); } } } }
void CtrlrPanel::setInstanceProperties(const ValueTree &instanceState) { // _DBG("CtrlrPanel::setInstanceProperties "+instanceState.getType().toString()); /* here we need to set all the MIDI properties for the instance */ if (instanceState.hasType (Ids::panelState)) { for (int i=0; i<instanceState.getNumProperties(); i++) { if (instanceState.getPropertyName(i).toString().startsWith ("panelMidi")) { // _DBG("\t"+instanceState.getPropertyName(i).toString()); setProperty (instanceState.getPropertyName(i), instanceState.getProperty(instanceState.getPropertyName(i))); } } } }
void StoredSettings::AddRecentString(const Identifier& Type, const String& Str) { ValueTree tree = GetProperty(Type); if(tree.getNumProperties() >= MAX_RECENT_STRINGS){ //If we have more strings in the history over the range, remove the oldest one from it. tree.removeProperty(tree.getPropertyName(0), nullptr); } tree.setProperty(Identifier(String(Str.hashCode64())), var(Str), nullptr); }
void CtrlrPanelComponentProperties::setTree (const ValueTree &_treeToEdit, const bool force) { if (_treeToEdit == treeToEdit && force == false) { return; } ScopedPointer <XmlElement> xml(propertyPanel->getOpennessState()); if (treeToEdit.hasType(Ids::panel)) { panelPropertyOpennessState = *xml; } else if (treeToEdit.hasType(Ids::modulator)) { modulatorPropertyOpennessState = *xml; } treeToEdit = _treeToEdit; /** Panel properties **/ if (treeToEdit.hasType (Ids::panel)) { Array <PropertyComponent*> panelProperties; Array <PropertyComponent*> panelEditorProperties; Array <PropertyComponent*> panelMidiProperties; for (int i=0; i<treeToEdit.getNumProperties(); i++) { if (treeToEdit.getPropertyName(i) == Ids::uiPanelImageResource) { panelProperties.add ( owner.getOwner().getOwner().getIDManager().createComponentForProperty ( treeToEdit.getPropertyName(i), treeToEdit, &owner.getOwner(), &resourceList, &resourceList ) ); } else if (treeToEdit.getPropertyName(i) == Ids::panelMidiInputDevice) { panelMidiProperties.add ( owner.getOwner().getOwner().getIDManager().createComponentForProperty ( treeToEdit.getPropertyName(i), treeToEdit, &owner.getOwner(), &midiInputDevices, &midiInputDevices ) ); } else if (treeToEdit.getPropertyName(i) == Ids::panelMidiOutputDevice) { panelMidiProperties.add ( owner.getOwner().getOwner().getIDManager().createComponentForProperty ( treeToEdit.getPropertyName(i), treeToEdit, &owner.getOwner(), &midiOutputDevices, &midiOutputDevices ) ); } else if (treeToEdit.getPropertyName(i) == Ids::panelMidiControllerDevice) { panelMidiProperties.add ( owner.getOwner().getOwner().getIDManager().createComponentForProperty ( treeToEdit.getPropertyName(i), treeToEdit, &owner.getOwner(), &midiInputDevices, &midiInputDevices ) ); } else if (treeToEdit.getPropertyName(i).toString().startsWith("panelMidi")) { panelMidiProperties.add ( owner.getOwner().getOwner().getIDManager().createComponentForProperty ( treeToEdit.getPropertyName(i), treeToEdit, &owner.getOwner() ) ); } else { panelProperties.add ( owner.getOwner().getOwner().getIDManager().createComponentForProperty ( treeToEdit.getPropertyName(i), treeToEdit, &owner.getOwner() ) ); } } /** Panel editor properties **/ if (treeToEdit.getChildWithName (Ids::uiPanelEditor).isValid()) { for (int i=0; i<treeToEdit.getChildWithName (Ids::uiPanelEditor).getNumProperties(); i++) { if (treeToEdit.getChildWithName (Ids::uiPanelEditor).getPropertyName(i) == Ids::uiPanelImageResource) { panelEditorProperties.add ( owner.getOwner().getOwner().getIDManager().createComponentForProperty ( treeToEdit.getChildWithName (Ids::uiPanelEditor).getPropertyName(i), treeToEdit.getChildWithName(Ids::uiPanelEditor), &owner.getOwner(), &resourceList, &resourceList ) ); } else { panelEditorProperties.add ( owner.getOwner().getOwner().getIDManager().createComponentForProperty ( treeToEdit.getChildWithName (Ids::uiPanelEditor).getPropertyName(i), treeToEdit.getChildWithName(Ids::uiPanelEditor), &owner.getOwner() ) ); } } } propertyPanel->clear(); if (panelProperties.size() != 0) propertyPanel->addSection ("Panel", panelProperties); if (panelMidiProperties.size() != 0) propertyPanel->addSection ("MIDI", panelMidiProperties); if (panelMidiProperties.size() != 0) propertyPanel->addSection ("Editor", panelEditorProperties); } /** Modulator properties **/ if (treeToEdit.hasType (Ids::modulator)) { propertyPanel->clear(); refreshTargetModulationPropertyList (treeToEdit); Array <PropertyComponent*> modulatorProperties; Array <PropertyComponent*> componentProperties; Array <PropertyComponent*> midiProperties; Array <PropertyComponent*> componentUIProperties; for (int i=0; i<treeToEdit.getNumProperties(); i++) { if (treeToEdit.getPropertyName(i) == Ids::modulatorLinkedToModulator) { modulatorProperties.add ( owner.getOwner().getOwner().getIDManager().createComponentForProperty ( treeToEdit.getPropertyName(i), treeToEdit, &owner.getOwner(), &modulatorList, &modulatorList ) ); } else if (treeToEdit.getPropertyName(i) == Ids::modulatorLinkedToModulatorProperty) { modulatorProperties.add ( owner.getOwner().getOwner().getIDManager().createComponentForProperty ( treeToEdit.getPropertyName(i), treeToEdit, &owner.getOwner(), &modulatorPropertyList, &modulatorPropertyList ) ); } else if (treeToEdit.getPropertyName(i) == Ids::modulatorLinkedToPanelProperty) { modulatorProperties.add ( owner.getOwner().getOwner().getIDManager().createComponentForProperty ( treeToEdit.getPropertyName(i), treeToEdit, &owner.getOwner(), &panelPropertyList, &panelPropertyList ) ); } else { modulatorProperties.add ( owner.getOwner().getOwner().getIDManager().createComponentForProperty ( treeToEdit.getPropertyName(i), treeToEdit, &owner.getOwner(), &emptyValueSet, &emptyValueSet ) ); } } for (int i=0; i<treeToEdit.getNumChildren(); i++) { /** MIDI properties **/ if (treeToEdit.getChild(i).hasType(Ids::midi)) { for (int j=0; j<treeToEdit.getChild(i).getNumProperties(); j++) { const Identifier n = treeToEdit.getChild(i).getPropertyName(j); if (treeToEdit.getChild(i).getPropertyName(j) == Ids::midiMessageType) { midiProperties.add ( owner.getOwner().getOwner().getIDManager().createComponentForProperty ( treeToEdit.getChild(i).getPropertyName(j), treeToEdit.getChild(i), &owner.getOwner(), &midiTemplateNames, &emptyValueSet) ); } else { midiProperties.add ( owner.getOwner().getOwner().getIDManager().createComponentForProperty ( treeToEdit.getChild(i).getPropertyName(j), treeToEdit.getChild(i), &owner.getOwner() ) ); } } } /** Component properties **/ if (treeToEdit.getChild(i).hasType(Ids::component)) { if (treeToEdit.getChild(i).getNumChildren() >= 0) { for (int j=0; j<treeToEdit.getChild(i).getNumChildren(); j++) { ValueTree child = treeToEdit.getChild(i).getChild(j); for (int k=0; k<child.getNumProperties(); k++) { if (child.getPropertyName(k) == Ids::uiTabsTabBackgroundImage) { componentProperties.add ( owner.getOwner().getOwner().getIDManager().createComponentForProperty ( child.getPropertyName(k), child, &owner.getOwner(), &resourceList, &resourceList ) ); } else if (child.getPropertyName(k) == Ids::uiEnvelopePointLinkX || child.getPropertyName(k) == Ids::uiEnvelopePointLinkY) { componentProperties.add ( owner.getOwner().getOwner().getIDManager().createComponentForProperty ( child.getPropertyName(k), child, &owner.getOwner(), &modulatorList, &modulatorList ) ); } else { componentProperties.add ( owner.getOwner().getOwner().getIDManager().createComponentForProperty ( child.getPropertyName(k), child, &owner.getOwner() ) ); } } } } for (int j=0; j<treeToEdit.getChild(i).getNumProperties(); j++) { const Identifier n = treeToEdit.getChild(i).getPropertyName(j); if (n == Ids::uiImageResource || n == Ids::uiImageSliderResource || n == Ids::uiImageButtonResource || n == Ids::uiGroupBackgroundImage || n == Ids::uiTabsTabBackgroundImage || n == Ids::uiXYSurfaceBgImageResource) { componentProperties.add ( owner.getOwner().getOwner().getIDManager().createComponentForProperty ( treeToEdit.getChild(i).getPropertyName(j), treeToEdit.getChild(i), &owner.getOwner(), &resourceList, &resourceList ) ); } else if (n.toString().startsWith("ui")) { componentUIProperties.add ( owner.getOwner().getOwner().getIDManager().createComponentForProperty ( treeToEdit.getChild(i).getPropertyName(j), treeToEdit.getChild(i), &owner.getOwner() ) ); } else { componentProperties.add ( owner.getOwner().getOwner().getIDManager().createComponentForProperty ( treeToEdit.getChild(i).getPropertyName(j), treeToEdit.getChild(i), &owner.getOwner() ) ); } } } } if (modulatorProperties.size() != 0) propertyPanel->addSection ("Modulator", modulatorProperties); if (midiProperties.size() != 0) propertyPanel->addSection ("MIDI", midiProperties); if (componentProperties.size() != 0) propertyPanel->addSection ("Component generic", componentProperties); if (componentUIProperties.size() != 0) propertyPanel->addSection ("Component", componentUIProperties); } }
Result CtrlrPanel::restoreState (const ValueTree &savedState) { setRestoreState (true); panelTree.removeProperty (Ids::panelScheme, nullptr); ctrlrLuaManager->restoreState(savedState.getChildWithName(Ids::luaManager)); if ((int)savedState.getProperty(Ids::panelScheme) < CTRLR_PANEL_SCHEME) upgradeScheme(); for (int i=0; i<savedState.getNumProperties(); i++) { panelTree.setProperty (savedState.getPropertyName(i), savedState.getProperty(savedState.getPropertyName(i), 0), 0); } if (savedState.getChildWithName(Ids::resourceExportList).isValid()) { Result resourceImport = resourceManager.restoreState(savedState.getChildWithName(Ids::resourceExportList)); if (!resourceImport.wasOk()) { WARN("Failed to load panel: " + resourceImport.getErrorMessage()); setRestoreState (false); return (resourceImport); } } else if (owner.getInstanceResourcesTree().isValid()) { Result resourceImport = getResourceManager().restoreState(owner.getInstanceResourcesTree()); if (!resourceImport.wasOk()) { WARN("Failed to load panel: " + resourceImport.getErrorMessage()); setRestoreState (false); return (resourceImport); } } if (luaPanelBeforeLoadCbk && !luaPanelBeforeLoadCbk.wasObjectDeleted()) { if (luaPanelBeforeLoadCbk->isValid()) { getCtrlrLuaManager().getMethodManager().call (luaPanelBeforeLoadCbk); } } if (savedState.getChildWithName(Ids::panelResources).isValid()) { getResourceManager().restoreSavedState(savedState.getChildWithName(Ids::panelResources)); } resourceImportFinished(); if (savedState.getChildWithName(Ids::uiPanelEditor).isValid()) { getEditor(true)->restoreState(savedState); } if (savedState.getChildWithName(Ids::midiLibrary).isValid()) { getCtrlrMIDILibrary().restoreState(savedState.getChildWithName(Ids::midiLibrary)); } if (savedState.getChildWithName(Ids::uiWindowManager).isValid()) { panelWindowManager.restoreState (savedState.getChildWithName(Ids::uiWindowManager)); } setRestoreState (false); if (owner.getInstanceMode() == InstanceMulti) { bootstrapPanel(); } return Result::ok(); }