/// <summary> /// /// </summary> /// <param name="nodes"></param> /// <param name="groups"></param> /// <param name="rawData">Represents the current contents of the file. Reference is not held. A copy is made.</param> /// <param name="file"></param> /// <param name="serializer"></param> /// <param name="errors"></param> /// <param name="nodeFactory"></param> /// <param name="generateAudio"></param> /// <param name="getDocumentSource"></param> /// <param name="audioProvider"></param> public ConversationFile(Id <FileInProject> id, IEnumerable <GraphAndUI <NodeUIData> > nodes, IEnumerable <NodeGroup> groups, MemoryStream rawData, DocumentPath file, ISerializer <TData> serializer, ReadOnlyCollection <LoadError> errors, INodeFactory nodeFactory, GenerateAudio generateAudio, Func <IDynamicEnumParameter, object, DynamicEnumParameter.Source> getDocumentSource, IAudioLibrary audioProvider, UpToDateFile.BackEnd backEnd) : base(nodes, groups, errors, nodeFactory, generateAudio, getDocumentSource, audioProvider) { Id = id; m_file = new SaveableFileUndoable(rawData, file.FileInfo, SaveTo, backEnd); m_serializer = serializer; foreach (var node in m_nodes) { //TODO: AUDIO: Why are we automatically decorrupting specifically audio parameters? var audios = node.Data.Parameters.OfType <IAudioParameter>(); foreach (var aud in audios) { if (aud.Corrupted) { var val = generateAudio(this); aud.SetValueAction(val).Value.Redo(); m_file.ChangeNoUndo(); audioProvider.UpdateUsage(val); } } node.UpdateRendererCorruption(); } }
/// <summary> /// /// </summary> /// <param name="nodes"></param> /// <param name="groups"></param> /// <param name="rawData">Represents the current contents of the file. Reference is not held. A copy is made.</param> /// <param name="file"></param> /// <param name="errors"></param> /// <param name="datasource"></param> /// <param name="serializer"></param> /// <param name="nodeFactory"></param> /// <param name="domainUsage"></param> /// <param name="getDocumentSource"></param> /// <param name="autoCompletePatterns"></param> public DomainFile(IEnumerable <GraphAndUI <NodeUIData> > nodes, IEnumerable <NodeGroup> groups, MemoryStream rawData, Id <FileInProject> file, DocumentPath path, ReadOnlyCollection <LoadError> errors, DomainDomain datasource, ISerializer <TData> serializer, INodeFactory nodeFactory, Func <IDomainUsage <ConversationNode, TransitionNoduleUIInfo> > domainUsage, Func <IDynamicEnumParameter, object, DynamicEnumParameter.Source> getDocumentSource, IEnumerable <IAutoCompletePattern> autoCompletePatterns, UpToDateFile.BackEnd backEnd) : base(nodes, groups, errors, nodeFactory, null, getDocumentSource, NoAudio.Instance) { Id = file; m_file = new SaveableFileUndoable(rawData, path.FileInfo, SaveTo, backEnd); m_domainUsage = domainUsage; foreach (var node in m_nodes) { var n = node; node.Modified += () => NodeModified(n); node.Data.Linked += () => NodeLinked(n); } m_nodes.Inserting += (n) => { AddToData(n.Data.Only(), m_datasource); ConversationDomainModified.Execute(); //No need to be picky about false positives n.Modified += () => NodeModified(n); n.Data.Linked += () => NodeLinked(n); }; m_nodes.Removing += RemoveFromData; m_nodes.Clearing += ClearData; //Currently nothing clears the list m_datasource = datasource; //m_conversationDatasource = conversationDataSource; m_serializer = serializer; m_autoCompletePatterns = new List <IAutoCompletePattern>(autoCompletePatterns); }