예제 #1
0
        void SurrogateRead(StreamingContext context)
        {
            SelectedTimingProvider = _selectedTimingProviderSurrogate.CreateSelectedTimingProvider();
            Media = new MediaCollection(_mediaSurrogates.Select(x => x.CreateMedia()));

            // Rehydrate the local module data store.
            LocalDataSet            = new ModuleLocalDataSet();
            LocalDataSet.DataModels = _dataModels;

            // Rehydrate the modules.
            IEffectNode[]         effectNodes         = _effectNodeSurrogates.Select(x => x.CreateEffectNode()).ToArray();
            ISequenceFilterNode[] sequenceFilterNodes = _filterNodeSurrogates.Select(x => x.CreateFilterNode()).ToArray();

            // Connect them to their respective data from the data store.
            // This was previously being done by adding the data to the sequence after loading the data.
            foreach (var effectNode in effectNodes)
            {
                LocalDataSet.AssignModuleInstanceData(effectNode.Effect);
            }
            foreach (var sequenceFilterNode in sequenceFilterNodes)
            {
                LocalDataSet.AssignModuleInstanceData(sequenceFilterNode.Filter);
            }

            // Get the modules back into their collections.
            _InitDataStreams();
            EffectData.AddData(effectNodes);
            SequenceFilterData.AddData(sequenceFilterNodes);
        }
예제 #2
0
        private void SurrogateRead(StreamingContext context)
        {
            SelectedTimingProvider = _selectedTimingProviderSurrogate.CreateSelectedTimingProvider();
            Media = new MediaCollection(_mediaSurrogates.Select(x => x.CreateMedia()));

            // Rehydrate the local module data store.
            LocalDataSet            = new ModuleLocalDataSet();
            LocalDataSet.DataModels = _dataModels;

            // Rehydrate the modules.
            var elementNodes = VixenSystem.Nodes.Distinct().ToDictionary(x => x.Id);

            IEffectNode[] effectNodes = _effectNodeSurrogates.Select(x => x.CreateEffectNode(elementNodes)).ToArray();
            // weed out effects without nodes..
            effectNodes = effectNodes.Where(x => x.Effect.TargetNodes.Count() != 0).ToArray();

            ISequenceFilterNode[] sequenceFilterNodes = _filterNodeSurrogates.Select(x => x.CreateFilterNode()).ToArray();

            // Connect them to their respective data from the data store.
            // This was previously being done by adding the data to the sequence after loading the data.
            foreach (var effectNode in effectNodes)
            {
                LocalDataSet.AssignModuleInstanceData(effectNode.Effect);
            }
            foreach (var sequenceFilterNode in sequenceFilterNodes)
            {
                LocalDataSet.AssignModuleInstanceData(sequenceFilterNode.Filter);
            }

            // Get the modules back into their collections.
            _InitDataStreams();
            EffectData.AddData(effectNodes);
            SequenceFilterData.AddData(sequenceFilterNodes);
        }
예제 #3
0
 public SequenceTypeDataModelBase()
 {
     Media          = new MediaCollection();
     LocalDataSet   = new ModuleLocalDataSet();
     SequenceLayers = new SequenceLayers();
     _InitDataStreams();
 }
예제 #4
0
 protected Sequence()
 {
     FilePath            = "";
     InsertDataListener  = new InsertDataListenerStack();
     InsertDataListener += _DataListener;
     Data = new DataStreams();
     _sequenceFilterStreamId = Data.CreateStream("SequenceFilter");
     TimingProvider          = new TimingProviders(this);
     RuntimeBehaviors        = Modules.ModuleManagement.GetAllRuntimeBehavior();
     ModuleDataSet           = new ModuleLocalDataSet();
     _media = new MediaCollection();
 }
        private IModuleDataSet _GetTransformModuleData(XElement element)
        {
            IModuleDataSet moduleDataSet = new ModuleLocalDataSet();

            if (!element.IsEmpty)
            {
                string moduleDataString = element.InnerXml();
                moduleDataSet.Deserialize(moduleDataString);
            }

            return(moduleDataSet);
        }
        private IModuleDataSet _GetModuleData(XElement element)
        {
            IModuleDataSet moduleDataSet = new ModuleLocalDataSet();

            element = element.Element(ELEMENT_MODULE_DATA);

            if (!element.IsEmpty)
            {
                string moduleDataString = element.InnerXml();
                moduleDataSet.Deserialize(moduleDataString);
            }

            return(moduleDataSet);
        }
예제 #7
0
파일: Modules.cs 프로젝트: ctmal/vixen
        /// <summary>
        /// Creates a default data object for the module without adding it to any dataset.
        /// </summary>
        /// <param name="instance"></param>
        /// <returns></returns>
        static private IModuleDataModel _GetModuleData(IModuleInstance instance)
        {
            // Remember, the data is orphaned initially!
            IModuleDataModel dataModel = null;

            if (instance.Descriptor.ModuleDataClass != null)
            {
                dataModel = ModuleLocalDataSet.CreateModuleDataInstance(instance);
                if (dataModel == null)
                {
                    VixenSystem.Logging.Error("Module \"" + instance.Descriptor.TypeName + "\" in " + instance.Descriptor.FileName + " has a reference to type " + instance.Descriptor.ModuleDataClass.Name + " for its module data class, but it's not an implementation of " + typeof(IModuleDataModel).Name + ".");
                }
            }

            return(dataModel);
        }
예제 #8
0
        /// <summary>
        /// Creates a default data object for the module without adding it to any dataset.
        /// </summary>
        /// <param name="instance"></param>
        /// <returns></returns>
        private static IModuleDataModel _GetModuleData(IModuleInstance instance)
        {
            // Remember, the data is orphaned initially!
            IModuleDataModel dataModel = null;

            if (instance.Descriptor.ModuleDataClass != null)
            {
                dataModel = ModuleLocalDataSet.CreateModuleDataInstance(instance);
                if (dataModel == null)
                {
                    Logging.Error(string.Format("Module \"{0}\" in {1} has a reference to type {2} for its module data class, but it's not an implementation of {3}.", instance.Descriptor.TypeName, instance.Descriptor.FileName, instance.Descriptor.ModuleDataClass.Name, typeof(IModuleDataModel).Name));
                }
            }

            return(dataModel);
        }
예제 #9
0
        private void SurrogateWrite(StreamingContext context)
        {
            // while saving module instance data, load the instance IDs of the modules in the sequence into a set. Then, when saving the
            // data set for all the modules, we can check if the module data is actually *being used* by anything; if not, we can remove it.
            HashSet <Guid> activeInstances = new HashSet <Guid>();

            _selectedTimingProviderSurrogate = new SelectedTimingProviderSurrogate(SelectedTimingProvider);
            if (Media != null)
            {
                _mediaSurrogates = Media.Select(x => new MediaSurrogate(x)).ToArray();
                Media.ForEach(x => activeInstances.Add(x.InstanceId));
            }
            if (EffectData != null)
            {
                _effectNodeSurrogates = EffectData.Select(x => new EffectNodeSurrogate((IEffectNode)x)).ToArray();
                foreach (IDataNode dataNode in EffectData)
                {
                    activeInstances.Add(((IEffectNode)dataNode).Effect.InstanceId);
                }
            }

            if (SequenceLayers != null)
            {
                _layerMixingFilterSurrogates = SequenceLayers.Layers.Where(x => x.LayerMixingFilter != null).Select(x => new LayerMixingFilterSurrogate(x)).ToArray();
                ModuleLocalDataSet data = new ModuleLocalDataSet();
                foreach (var layer in SequenceLayers.Layers)
                {
                    if (layer != null)
                    {
                        data.AssignModuleInstanceData(layer.LayerMixingFilter);
                    }
                }
                _layerMixingFilterDataModels = data.DataModels.ToArray();
            }

            if (LocalDataSet != null)
            {
                _dataModels = LocalDataSet.DataModels.Where(x => activeInstances.Contains(x.ModuleInstanceId)).ToArray();
            }

            if (SequenceFilterData != null)
            {
                _filterNodeSurrogates = SequenceFilterData.Select(x => new FilterNodeSurrogate((ISequenceFilterNode)x)).ToArray();
            }
        }
예제 #10
0
        private ISequenceTypeDataModel _CreateSequenceDataInstance(string fileType)
        {
            ISequenceTypeModuleInstance sequenceFactory = SequenceTypeService.Instance.CreateSequenceFactory(fileType);

            if (sequenceFactory != null)
            {
                IModuleDataModel sequenceTypeData = ModuleLocalDataSet.CreateModuleDataInstance(sequenceFactory);
                if (sequenceTypeData != null && !(sequenceTypeData is ISequenceTypeDataModel))
                {
                    VixenSystem.Logging.Warning("Could not create appropriate sequence data for new sequence due to the object type.  File type: " + fileType);
                }
                else
                {
                    if (sequenceTypeData != null)
                    {
                        sequenceTypeData.ModuleTypeId     = sequenceFactory.TypeId;
                        sequenceTypeData.ModuleInstanceId = sequenceFactory.InstanceId;
                    }
                    return((ISequenceTypeDataModel)sequenceTypeData);
                }
            }
            return(null);
        }
예제 #11
0
        private void SurrogateRead(StreamingContext context)
        {
            SelectedTimingProvider = _selectedTimingProviderSurrogate.CreateSelectedTimingProvider();
            Media = new MediaCollection(_mediaSurrogates.Select(x => x.CreateMedia()));

            // Rehydrate the local module data store.
            LocalDataSet = new ModuleLocalDataSet();
            LocalDataSet.DataModels = _dataModels;

            // Rehydrate the modules.
            var elementNodes = VixenSystem.Nodes.Distinct().ToDictionary(x => x.Id);
            IEffectNode[] effectNodes = _effectNodeSurrogates.Select(x => x.CreateEffectNode(elementNodes)).ToArray();
            // weed out effects without nodes..
            effectNodes = effectNodes.Where(x => x.Effect.TargetNodes.Count() != 0).ToArray();

            ISequenceFilterNode[] sequenceFilterNodes = _filterNodeSurrogates.Select(x => x.CreateFilterNode()).ToArray();

            // Connect them to their respective data from the data store.
            // This was previously being done by adding the data to the sequence after loading the data.
            foreach (var effectNode in effectNodes) {
                LocalDataSet.AssignModuleInstanceData(effectNode.Effect);
            }
            foreach (var sequenceFilterNode in sequenceFilterNodes) {
                LocalDataSet.AssignModuleInstanceData(sequenceFilterNode.Filter);
            }

            // Get the modules back into their collections.
            _InitDataStreams();
            EffectData.AddData(effectNodes);
            SequenceFilterData.AddData(sequenceFilterNodes);
        }
예제 #12
0
 public SequenceTypeDataModelBase()
 {
     Media = new MediaCollection();
     LocalDataSet = new ModuleLocalDataSet();
     _InitDataStreams();
 }
예제 #13
0
 public ModuleStore()
 {
     TypeData     = new ModuleStaticDataSet();
     InstanceData = new ModuleLocalDataSet();
 }