Esempio n. 1
0
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);
		}
	}
}
Esempio n. 3
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);
			}
		}
	}
}
Esempio n. 5
0
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);
	}
}
Esempio n. 8
0
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();
}