예제 #1
0
 protected ScheduledTimelineItem(TimelineItemManager timelineItemManager, StoryboardTimelineSceneNode parentTimeline, TimelineSceneNode scheduledAnimation)
     : base(timelineItemManager)
 {
     this.scheduledAnimations = new List <TimelineSceneNode>();
     this.AddScheduledAnimation(scheduledAnimation);
     this.parentTimeline = parentTimeline;
 }
예제 #2
0
        private void EnsureProperActions(TriggerBaseNode trigger, StoryboardTimelineSceneNode storyboard)
        {
            if (!TriggersHelper.NeedsBeginAction(storyboard))
            {
                return;
            }
            TimelineActionNode timelineActionNode = (TimelineActionNode)BeginActionNode.Factory.Instantiate(storyboard.ViewModel);

            timelineActionNode.TargetTimeline = storyboard;
            TriggersHelper.DefaultAddAction(trigger, (TriggerActionNode)timelineActionNode);
            storyboard.UpdateActionNames();
        }
예제 #3
0
 public static MediaTimelineItem FindItem(TimelineItem parentTimelineItem, StoryboardTimelineSceneNode parentTimeline, SceneElement mediaElement)
 {
     for (int index = 0; index < parentTimelineItem.Children.Count; ++index)
     {
         MediaTimelineItem mediaTimelineItem = parentTimelineItem.Children[index] as MediaTimelineItem;
         if (mediaTimelineItem != null && mediaTimelineItem.ParentTimeline == parentTimeline && mediaTimelineItem.MediaElement == mediaElement)
         {
             return(mediaTimelineItem);
         }
     }
     return((MediaTimelineItem)null);
 }
예제 #4
0
            public string GetUndoString(object obj)
            {
                StoryboardTimelineSceneNode timelineSceneNode = obj as StoryboardTimelineSceneNode;

                if (timelineSceneNode == null)
                {
                    return("");
                }
                return(string.Format((IFormatProvider)CultureInfo.CurrentCulture, "{0}", new object[1]
                {
                    (object)timelineSceneNode.TargetType.ToString()
                }));
            }
예제 #5
0
            public ExpandAllProxiesToken(AnimationProxyManager manager)
            {
                this.manager = manager;
                SceneViewModel sceneViewModel = this.manager.viewModel;
                StoryboardTimelineSceneNode storyboardTimeline = sceneViewModel.ActiveStoryboardTimeline;

                foreach (StoryboardTimelineSceneNode storyboard in sceneViewModel.AnimationEditor.EnumerateStoryboardsForContainer(sceneViewModel.ActiveStoryboardContainer))
                {
                    if (storyboard != storyboardTimeline)
                    {
                        this.proxyTokens.Add(new AnimationProxyManager.ExpandProxiesToken(this.manager, storyboard));
                    }
                }
            }
        public override void Execute()
        {
            AnimationEditor      animationEditor  = this.SceneViewModel.AnimationEditor;
            SceneElement         pathTarget       = this.GetPathTarget(this.SceneViewModel.ElementSelectionSet);
            BaseFrameworkElement frameworkElement = (BaseFrameworkElement)this.GetAnimationTarget(this.SceneViewModel.ElementSelectionSet);

            if (frameworkElement == null)
            {
                SceneElement root = this.SceneViewModel.ActiveEditingContainer as SceneElement;
                if (root != null)
                {
                    frameworkElement = PathTargetDialog.ChooseMotionPathTarget(root, pathTarget);
                }
            }
            if (frameworkElement == null)
            {
                return;
            }
            PathGeometry geometry = PathConversionHelper.ConvertToPathGeometry(pathTarget);

            if (PathGeometryUtilities.TotalSegmentCount(geometry) == 0)
            {
                this.DesignerContext.MessageDisplayService.ShowError(StringTable.ConvertToMotionPathNoSegmentsMessage);
            }
            else
            {
                using (SceneEditTransaction editTransaction = this.SceneViewModel.CreateEditTransaction(StringTable.ConvertToMotionPathUndo, false))
                {
                    StoryboardTimelineSceneNode targetTimeline = this.GetTargetTimeline();
                    if (targetTimeline == null)
                    {
                        this.SceneViewModel.AnimationEditor.CreateNewTimeline(TriggerCreateBehavior.Default);
                    }
                    else if (targetTimeline != this.SceneViewModel.ActiveStoryboardTimeline)
                    {
                        this.SceneViewModel.SetActiveStoryboardTimeline(targetTimeline.StoryboardContainer, targetTimeline, (TriggerBaseNode)null);
                    }
                    this.SceneViewModel.ElementSelectionSet.Clear();
                    Point        elementCoordinates = frameworkElement.RenderTransformOriginInElementCoordinates;
                    Matrix       matrix             = new TranslateTransform(-elementCoordinates.X, -elementCoordinates.Y).Value;
                    Transform    transform          = (Transform) new MatrixTransform(pathTarget.GetComputedTransformToElement((SceneElement)frameworkElement) * frameworkElement.GetEffectiveRenderTransform(false) * matrix);
                    PathGeometry path          = PathGeometryUtilities.TransformGeometry((System.Windows.Media.Geometry)geometry, transform);
                    double       animationTime = animationEditor.AnimationTime;
                    animationEditor.SetMotionPath((SceneElement)frameworkElement, path, new double?(animationTime), new double?(animationTime + 2.0));
                    this.SceneViewModel.ElementSelectionSet.SetSelection((SceneElement)frameworkElement);
                    editTransaction.Commit();
                }
            }
        }
예제 #7
0
 internal override void UpdatePathIfNeeded()
 {
     if (this.IsCurrentlyEditing || !this.EditingElement.IsAttached || (int)this.changeStamp == (int)this.ViewModel.ChangeStamp && this.storedSeekTime == this.ViewModel.StoredSeekTime && (this.activeTimeline == this.ViewModel.ActiveStoryboardTimeline && !this.isDeferringUpdate))
     {
         return;
     }
     this.changeStamp    = this.ViewModel.ChangeStamp;
     this.storedSeekTime = this.ViewModel.StoredSeekTime;
     this.activeTimeline = this.ViewModel.ActiveStoryboardTimeline;
     if (this.IsAnimated || this.isDeferringUpdate)
     {
         this.UpdateCachedPath();
     }
     this.isDeferringUpdate = false;
 }
예제 #8
0
        public static bool NeedsBeginAction(StoryboardTimelineSceneNode storyboard)
        {
            bool flag = false;

            foreach (TimelineActionNode timelineActionNode in storyboard.ControllingActions)
            {
                if (timelineActionNode is BeginActionNode)
                {
                    return(false);
                }
                if (timelineActionNode is ControllableStoryboardActionNode)
                {
                    flag = true;
                }
            }
            return(flag);
        }
예제 #9
0
        private FromToAnimationSceneNode ConvertToOptimizedAnimation(KeyFrameAnimationSceneNode proxyAnimation)
        {
            StoryboardTimelineSceneNode controllingStoryboard = proxyAnimation.ControllingStoryboard;
            FromToAnimationSceneNode    animationSceneNode    = FromToAnimationSceneNode.Factory.InstantiateWithTarget(this.viewModel, proxyAnimation.TargetElement, proxyAnimation.TargetProperty, proxyAnimation.StoryboardContainer, FromToAnimationSceneNode.GetFromToAnimationForType(proxyAnimation.AnimatedType, proxyAnimation.ProjectContext));
            KeyFrameSceneNode           keyFrameAtIndex       = proxyAnimation.GetKeyFrameAtIndex(0);

            animationSceneNode.Duration = keyFrameAtIndex.Time;
            SceneNode.CopyPropertyValue((SceneNode)keyFrameAtIndex, keyFrameAtIndex.ValueProperty, (SceneNode)animationSceneNode, animationSceneNode.ToProperty);
            SceneNode.CopyPropertyValue((SceneNode)keyFrameAtIndex, keyFrameAtIndex.EasingFunctionProperty, (SceneNode)animationSceneNode, animationSceneNode.EasingFunctionProperty);
            animationSceneNode.IsOptimized  = true;
            proxyAnimation.IsAnimationProxy = true;
            proxyAnimation.ShouldSerialize  = false;
            keyFrameAtIndex.ShouldSerialize = false;
            int index = proxyAnimation.ControllingStoryboard.Children.IndexOf((TimelineSceneNode)proxyAnimation);

            proxyAnimation.ControllingStoryboard.Children.Insert(index, (TimelineSceneNode)animationSceneNode);
            return(animationSceneNode);
        }
예제 #10
0
 protected override void Delete()
 {
     if (!this.SceneNode.IsAttached)
     {
         return;
     }
     if (!TriggersHelper.CanDeleteAction(this.TimelineAction))
     {
         this.SceneNode.ViewModel.DesignerContext.MessageDisplayService.ShowError(StringTable.TriggerDeleteBeginAction);
     }
     else
     {
         using (SceneEditTransaction editTransaction = this.SceneNode.ViewModel.CreateEditTransaction(StringTable.TriggerChangeUndoUnit))
         {
             StoryboardTimelineSceneNode targetTimeline = this.TimelineAction.TargetTimeline;
             this.SceneNode.Remove();
             targetTimeline.UpdateActionNames();
             editTransaction.Commit();
         }
     }
 }
예제 #11
0
        private static void PasteStoryboard(SceneViewModel viewModel, StoryboardTimelineSceneNode storyboard, IList <SceneNode> selectionSet)
        {
            double baseKeyframeOffset = double.MaxValue;

            foreach (TimelineSceneNode timelineSceneNode in (IEnumerable <TimelineSceneNode>)storyboard.Children)
            {
                KeyFrameAnimationSceneNode animationSceneNode = timelineSceneNode as KeyFrameAnimationSceneNode;
                if (animationSceneNode != null)
                {
                    foreach (KeyFrameSceneNode keyFrameSceneNode in animationSceneNode.KeyFrames)
                    {
                        if (keyFrameSceneNode.Time < baseKeyframeOffset)
                        {
                            baseKeyframeOffset = keyFrameSceneNode.Time;
                        }
                    }
                }
            }
            if (baseKeyframeOffset == double.MaxValue)
            {
                baseKeyframeOffset = 0.0;
            }
            IList <SceneElement> list = (IList <SceneElement>)viewModel.ElementSelectionSet.Selection;

            if (list.Count == 0)
            {
                list = (IList <SceneElement>)viewModel.KeyFrameSelectionSet.DerivedTargetElements;
            }
            foreach (SceneElement element in (IEnumerable <SceneElement>)list)
            {
                foreach (TimelineSceneNode animation in (IEnumerable <TimelineSceneNode>)storyboard.Children)
                {
                    viewModel.AnimationEditor.ApplyAnimation(element, animation, baseKeyframeOffset, selectionSet);
                }
            }
        }
예제 #12
0
 public StoryboardTimelineHeader(StoryboardTimelineSceneNode timeline)
     : base(timeline)
 {
 }
예제 #13
0
        private void UpdateProxyTable(Dictionary <AnimationProxyManager.TargetNamePropertyPair, AnimationProxyManager.AnimationProxyData> proxyTable, StoryboardTimelineSceneNode storyboard, AnimationProxyManager.AllowedChange allowedChange)
        {
            if (allowedChange != AnimationProxyManager.AllowedChange.Any)
            {
                proxyTable.Clear();
            }
            List <KeyFrameAnimationSceneNode> list1 = new List <KeyFrameAnimationSceneNode>();

            foreach (TimelineSceneNode timeline in (IEnumerable <TimelineSceneNode>)storyboard.Children)
            {
                FromToAnimationSceneNode   animationSceneNode = timeline as FromToAnimationSceneNode;
                KeyFrameAnimationSceneNode nodeToTest         = timeline as KeyFrameAnimationSceneNode;
                if (animationSceneNode != null && animationSceneNode.IsOptimized || nodeToTest != null && nodeToTest.IsAnimationProxy)
                {
                    AnimationProxyManager.TargetNamePropertyPair key = new AnimationProxyManager.TargetNamePropertyPair(timeline);
                    if (key.TargetName != null)
                    {
                        AnimationProxyManager.AnimationProxyData animationProxyData;
                        if (!proxyTable.TryGetValue(key, out animationProxyData))
                        {
                            animationProxyData = new AnimationProxyManager.AnimationProxyData((FromToAnimationSceneNode)null, (KeyFrameAnimationSceneNode)null);
                            proxyTable[key]    = animationProxyData;
                        }
                        if (animationSceneNode != null)
                        {
                            animationProxyData.OptimizedAnimation = animationSceneNode;
                        }
                        else
                        {
                            animationProxyData.ProxyAnimation = nodeToTest;
                        }
                    }
                }
                else if (nodeToTest != null && this.CanOptimizeAnimation(nodeToTest))
                {
                    list1.Add(nodeToTest);
                }
            }
            if (allowedChange != AnimationProxyManager.AllowedChange.OnlyNonSerializing && allowedChange != AnimationProxyManager.AllowedChange.Any)
            {
                return;
            }
            if (allowedChange == AnimationProxyManager.AllowedChange.Any)
            {
                foreach (KeyFrameAnimationSceneNode proxyAnimation in list1)
                {
                    FromToAnimationSceneNode optimizedAnimation      = this.ConvertToOptimizedAnimation(proxyAnimation);
                    AnimationProxyManager.TargetNamePropertyPair key = new AnimationProxyManager.TargetNamePropertyPair((TimelineSceneNode)proxyAnimation);
                    AnimationProxyManager.AnimationProxyData     animationProxyData;
                    if (proxyTable.TryGetValue(key, out animationProxyData))
                    {
                        if (animationProxyData.OptimizedAnimation != null && animationProxyData.OptimizedAnimation.IsInDocument)
                        {
                            animationProxyData.OptimizedAnimation.ControllingStoryboard.Children.Remove((TimelineSceneNode)animationProxyData.OptimizedAnimation);
                        }
                        if (animationProxyData.ProxyAnimation != null && animationProxyData.ProxyAnimation.IsInDocument)
                        {
                            animationProxyData.ProxyAnimation.ControllingStoryboard.Children.Remove((TimelineSceneNode)animationProxyData.ProxyAnimation);
                        }
                        proxyTable.Remove(key);
                    }
                    proxyTable.Add(key, new AnimationProxyManager.AnimationProxyData(optimizedAnimation, proxyAnimation));
                }
            }
            List <AnimationProxyManager.TargetNamePropertyPair> list2 = new List <AnimationProxyManager.TargetNamePropertyPair>();

            foreach (KeyValuePair <AnimationProxyManager.TargetNamePropertyPair, AnimationProxyManager.AnimationProxyData> keyValuePair in proxyTable)
            {
                AnimationProxyManager.AnimationProxyData animationProxyData = keyValuePair.Value;
                int count = list2.Count;
                if (animationProxyData.ProxyAnimation != null && !keyValuePair.Key.Equals((object)new AnimationProxyManager.TargetNamePropertyPair((TimelineSceneNode)animationProxyData.ProxyAnimation)))
                {
                    animationProxyData.ProxyAnimation = (KeyFrameAnimationSceneNode)null;
                }
                if (animationProxyData.OptimizedAnimation != null && !keyValuePair.Key.Equals((object)new AnimationProxyManager.TargetNamePropertyPair((TimelineSceneNode)animationProxyData.OptimizedAnimation)))
                {
                    animationProxyData.OptimizedAnimation = (FromToAnimationSceneNode)null;
                }
                if (animationProxyData.OptimizedAnimation == null && animationProxyData.ProxyAnimation == null)
                {
                    list2.Add(keyValuePair.Key);
                }
                else if (animationProxyData.OptimizedAnimation == null || !animationProxyData.OptimizedAnimation.IsInDocument)
                {
                    if (allowedChange == AnimationProxyManager.AllowedChange.Any)
                    {
                        if (animationProxyData.ProxyAnimation != null && animationProxyData.ProxyAnimation.IsInDocument)
                        {
                            this.viewModel.AnimationEditor.RemoveAnimation(storyboard, (TimelineSceneNode)animationProxyData.ProxyAnimation);
                            if (animationProxyData.OptimizedAnimation != null && animationProxyData.OptimizedAnimation.IsInDocument)
                            {
                                animationProxyData.OptimizedAnimation.IsOptimized = false;
                            }
                        }
                        list2.Add(keyValuePair.Key);
                    }
                }
                else if (animationProxyData.ProxyWasUserDeleted && !animationProxyData.OptimizedAnimationAdded)
                {
                    if (allowedChange == AnimationProxyManager.AllowedChange.Any)
                    {
                        this.viewModel.AnimationEditor.RemoveAnimation(storyboard, (TimelineSceneNode)animationProxyData.OptimizedAnimation);
                        list2.Add(keyValuePair.Key);
                    }
                }
                else if (animationProxyData.ProxyAnimation == null || !animationProxyData.ProxyAnimation.IsInDocument)
                {
                    if (allowedChange == AnimationProxyManager.AllowedChange.OnlyNonSerializing || allowedChange == AnimationProxyManager.AllowedChange.Any)
                    {
                        animationProxyData.OptimizedAnimation.Invalidate();
                        if (animationProxyData.OptimizedAnimation.TargetElement != null)
                        {
                            KeyFrameAnimationSceneNode animationSceneNode = KeyFrameAnimationSceneNode.Factory.InstantiateWithTarget(this.viewModel, animationProxyData.OptimizedAnimation.TargetElement, animationProxyData.OptimizedAnimation.TargetProperty, animationProxyData.OptimizedAnimation.StoryboardContainer, KeyFrameAnimationSceneNode.GetKeyFrameAnimationForType(animationProxyData.OptimizedAnimation.AnimatedType, animationProxyData.OptimizedAnimation.ProjectContext));
                            animationSceneNode.AddKeyFrame(animationProxyData.OptimizedAnimation.Duration, animationProxyData.OptimizedAnimation.To);
                            KeyFrameSceneNode keyFrameAtIndex = animationSceneNode.GetKeyFrameAtIndex(0);
                            SceneNode.CopyPropertyValue((SceneNode)animationProxyData.OptimizedAnimation, animationProxyData.OptimizedAnimation.EasingFunctionProperty, (SceneNode)keyFrameAtIndex, keyFrameAtIndex.EasingFunctionProperty);
                            keyFrameAtIndex.ShouldSerialize     = false;
                            animationSceneNode.ShouldSerialize  = false;
                            animationSceneNode.IsAnimationProxy = true;
                            storyboard.Children.Insert(storyboard.Children.IndexOf((TimelineSceneNode)animationProxyData.OptimizedAnimation) + 1, (TimelineSceneNode)animationSceneNode);
                            animationProxyData.ProxyAnimation = animationSceneNode;
                        }
                    }
                }
                else if (!this.CanOptimizeAnimation(animationProxyData.ProxyAnimation))
                {
                    if (allowedChange == AnimationProxyManager.AllowedChange.Any)
                    {
                        this.RemoveOptimizedAndPromoteProxy(animationProxyData);
                        list2.Add(keyValuePair.Key);
                    }
                }
                else if ((!animationProxyData.OptimizedAnimation.IsOptimized || !AnimationProxyManager.CanFromToAnimationBeOptimized(animationProxyData.OptimizedAnimation)) && allowedChange == AnimationProxyManager.AllowedChange.Any)
                {
                    this.viewModel.AnimationEditor.RemoveAnimation(storyboard, (TimelineSceneNode)animationProxyData.ProxyAnimation);
                    animationProxyData.OptimizedAnimation.IsOptimized = false;
                    list2.Add(keyValuePair.Key);
                }
                if (count == list2.Count && allowedChange == AnimationProxyManager.AllowedChange.Any)
                {
                    if (!animationProxyData.OptimizedAnimationPropertyChanged && !animationProxyData.OptimizedAnimationAdded)
                    {
                        this.MovePropertiesFromProxyToOptimized(animationProxyData);
                    }
                    else
                    {
                        this.MovePropertiesFromOptimizedToProxy(animationProxyData);
                    }
                }
                animationProxyData.ResetUpdateState();
            }
            foreach (AnimationProxyManager.TargetNamePropertyPair key in list2)
            {
                proxyTable.Remove(key);
            }
        }
예제 #14
0
 public IDisposable ExpandProxies(StoryboardTimelineSceneNode storyboard)
 {
     return((IDisposable) new AnimationProxyManager.ExpandProxiesToken(this, storyboard));
 }
예제 #15
0
 public static ScheduledTimelineItem FindItem(TimelineItem parentTimelineItem, StoryboardTimelineSceneNode parentTimeline, PropertyReference targetProperty)
 {
     if (targetProperty == null)
     {
         return((ScheduledTimelineItem)null);
     }
     foreach (TimelineItem timelineItem in (Collection <TimelineItem>)parentTimelineItem.Children)
     {
         AnimationTimelineItem animationTimelineItem = timelineItem as AnimationTimelineItem;
         if (animationTimelineItem != null && animationTimelineItem.parentTimeline == parentTimeline && animationTimelineItem.TargetProperty.Path == targetProperty.Path)
         {
             return((ScheduledTimelineItem)animationTimelineItem);
         }
         CompoundPropertyTimelineItem propertyTimelineItem = timelineItem as CompoundPropertyTimelineItem;
         if (propertyTimelineItem != null)
         {
             ScheduledTimelineItem scheduledTimelineItem = ScheduledTimelineItem.FindItem((TimelineItem)propertyTimelineItem, parentTimeline, targetProperty);
             if (scheduledTimelineItem != null)
             {
                 return(scheduledTimelineItem);
             }
         }
         BehaviorTimelineItem behaviorTimelineItem = timelineItem as BehaviorTimelineItem;
         if (behaviorTimelineItem != null)
         {
             ScheduledTimelineItem scheduledTimelineItem = ScheduledTimelineItem.FindItem((TimelineItem)behaviorTimelineItem, parentTimeline, targetProperty);
             if (scheduledTimelineItem != null)
             {
                 return(scheduledTimelineItem);
             }
         }
         EffectTimelineItem effectTimelineItem = timelineItem as EffectTimelineItem;
         if (effectTimelineItem != null)
         {
             ScheduledTimelineItem scheduledTimelineItem = ScheduledTimelineItem.FindItem((TimelineItem)effectTimelineItem, parentTimeline, targetProperty);
             if (scheduledTimelineItem != null)
             {
                 return(scheduledTimelineItem);
             }
         }
     }
     return((ScheduledTimelineItem)null);
 }
예제 #16
0
 public AnimationTimelineItem(TimelineItemManager timelineItemManager, StoryboardTimelineSceneNode parentTimeline, AnimationSceneNode animationSceneNode)
     : base(timelineItemManager, parentTimeline, (TimelineSceneNode)animationSceneNode)
 {
 }
예제 #17
0
 public void Add(StoryboardTimelineSceneNode parent, TimelineSceneNode timeline)
 {
     this.toAdd.Add(new KeyValuePair <StoryboardTimelineSceneNode, TimelineSceneNode>(parent, timeline));
 }
예제 #18
0
 protected KeyFramedTimelineItem(TimelineItemManager timelineItemManager, SceneElement element, StoryboardTimelineSceneNode parentTimeline, KeyFrameAnimationSceneNode keyFramedAnimationSceneNode)
     : base(timelineItemManager, parentTimeline, (AnimationSceneNode)keyFramedAnimationSceneNode)
 {
     this.keyFrameItems = new ObservableCollection <KeyFrameItem>();
     this.element       = element;
     foreach (KeyFrameSceneNode keyFrameSceneNode in keyFramedAnimationSceneNode.KeyFrames)
     {
         this.AddKeyFrameItem(keyFrameSceneNode.Time);
     }
 }
예제 #19
0
 public PropertyTimelineItem(TimelineItemManager timelineItemManager, TimelineItem targetTimelineItem, SceneElement targetElement, StoryboardTimelineSceneNode parentTimeline, KeyFrameAnimationSceneNode propertyAnimation)
     : base(timelineItemManager, targetElement, parentTimeline, propertyAnimation)
 {
     this.targetTimelineItem = targetTimelineItem;
     this.targetTimelineItem.PropertyChanged += new PropertyChangedEventHandler(this.TargetTimelineItem_PropertyChanged);
 }
예제 #20
0
 public StoryboardOption(StoryboardTimelineSceneNode storyboard)
 {
     this.storyboard = storyboard;
 }
예제 #21
0
        protected override IList <SceneElement> AddToDocumentInternal(string importedFilePath, SceneElement element, ISceneInsertionPoint insertionPoint, SceneViewModel sceneViewModel, SceneEditTransaction editTransaction)
        {
            MediaSceneElement    mediaSceneElement = element as MediaSceneElement;
            IList <SceneElement> list = (IList <SceneElement>) new List <SceneElement>();

            if (mediaSceneElement != null)
            {
                double num = (double)mediaSceneElement.GetLocalOrDefaultValueAsWpf(DesignTimeProperties.DesignTimeNaturalDurationProperty);
                mediaSceneElement.ClearLocalValue(DesignTimeProperties.DesignTimeNaturalDurationProperty);
                if (insertionPoint.CanInsert((ITypeId)mediaSceneElement.Type))
                {
                    if (!JoltHelper.TypeSupported((ITypeResolver)element.ProjectContext, PlatformTypes.MediaTimeline))
                    {
                        Uri uri = new Uri(importedFilePath, UriKind.RelativeOrAbsolute);
                        mediaSceneElement.SetLocalValueAsWpf(MediaSceneElement.SourceProperty, (object)uri);
                    }
                    else
                    {
                        IStoryboardContainer        mediaStoryboardContainer = insertionPoint.SceneNode.StoryboardContainer;
                        StoryboardTimelineSceneNode targetStoryboard         = (StoryboardTimelineSceneNode)null;
                        sceneViewModel.EditContextManager.SingleViewModelEditContextWalker.Walk(false, (SingleHistoryCallback)((context, isGhosted) =>
                        {
                            if (context.StoryboardContainer != mediaStoryboardContainer)
                            {
                                return(false);
                            }
                            targetStoryboard = context.Timeline;
                            return(true);
                        }));
                        if (targetStoryboard == null)
                        {
                            foreach (TriggerBaseNode triggerBaseNode in (IEnumerable <TriggerBaseNode>)mediaStoryboardContainer.VisualTriggers)
                            {
                                EventTriggerNode eventTriggerNode = triggerBaseNode as EventTriggerNode;
                                if (eventTriggerNode != null && eventTriggerNode.RoutedEvent == FrameworkElement.LoadedEvent)
                                {
                                    foreach (SceneNode sceneNode in (IEnumerable <SceneNode>)eventTriggerNode.Actions)
                                    {
                                        TimelineActionNode timelineActionNode = sceneNode as TimelineActionNode;
                                        if (timelineActionNode != null && timelineActionNode.TimelineOperation == TimelineOperation.Begin)
                                        {
                                            targetStoryboard = timelineActionNode.TargetTimeline;
                                            if (!TimelinePane.ShouldExposeStoryboardToUser((SceneNode)targetStoryboard))
                                            {
                                                targetStoryboard = (StoryboardTimelineSceneNode)null;
                                            }
                                            else
                                            {
                                                break;
                                            }
                                        }
                                    }
                                }
                                if (targetStoryboard != null)
                                {
                                    break;
                                }
                            }
                            if (targetStoryboard != null)
                            {
                                sceneViewModel.SetActiveStoryboardTimeline(mediaStoryboardContainer, targetStoryboard, (TriggerBaseNode)null);
                            }
                        }
                        if (targetStoryboard == null)
                        {
                            targetStoryboard = sceneViewModel.AnimationEditor.CreateNewTimeline(sceneViewModel.ActiveStoryboardContainer, element.Name, TriggerCreateBehavior.Default, true);
                            sceneViewModel.AnimationEditor.IsRecording = false;
                        }
                        IType type = this.DesignerContext.ActiveDocument.ProjectContext.ResolveType(PlatformTypes.MediaTimeline);
                        MediaTimelineSceneNode timelineSceneNode = (MediaTimelineSceneNode)sceneViewModel.CreateSceneNode(type.RuntimeType);
                        timelineSceneNode.SetLocalValue(DesignTimeProperties.DesignTimeNaturalDurationProperty, (object)num);
                        Uri uri = new Uri(importedFilePath, UriKind.RelativeOrAbsolute);
                        timelineSceneNode.Source     = uri;
                        timelineSceneNode.TargetName = element.Name;
                        double animationTime = sceneViewModel.AnimationEditor.AnimationTime;
                        timelineSceneNode.Begin = animationTime;
                        targetStoryboard.Children.Add((TimelineSceneNode)timelineSceneNode);
                        editTransaction.Update();
                    }
                    list.Add(element);
                    insertionPoint.Insert((SceneNode)mediaSceneElement);
                }
            }
            return(list);
        }
예제 #22
0
 public MediaTimelineItem(TimelineItemManager timelineItemManager, SceneElement mediaElement, StoryboardTimelineSceneNode parentTimeline, MediaTimelineSceneNode mediaTimelineSceneNode)
     : base(timelineItemManager, parentTimeline, (TimelineSceneNode)mediaTimelineSceneNode)
 {
     this.mediaElement = mediaElement;
 }
예제 #23
0
        protected static IEnumerable <SceneNode> Enumerate(SceneNode pivot, SearchAxis axis, ISearchPredicate continueTester)
        {
            SceneViewModel viewModel = pivot.ViewModel;

            switch (axis.axisType)
            {
            case SearchAxis.AxisType.DocumentAncestor:
                foreach (DocumentNode node in pivot.DocumentNode.AncestorNodes)
                {
                    SceneNode sceneNode = viewModel.GetSceneNode(node);
                    yield return(sceneNode);

                    if (continueTester != null && !continueTester.Test(sceneNode))
                    {
                        break;
                    }
                }
                break;

            case SearchAxis.AxisType.DocumentParent:
                DocumentNode parentNode = (DocumentNode)pivot.DocumentNode.Parent;
                if (parentNode == null)
                {
                    break;
                }
                yield return(viewModel.GetSceneNode(parentNode));

                break;

            case SearchAxis.AxisType.DocumentChild:
                foreach (DocumentNode node in pivot.DocumentNode.ChildNodes)
                {
                    SceneNode sceneNode = viewModel.GetSceneNode(node);
                    yield return(sceneNode);
                }
                break;

            case SearchAxis.AxisType.DocumentDescendant:
                foreach (DocumentNode node in SearchAxis.TraverseDocumentDescendants(pivot.DocumentNode, continueTester, viewModel))
                {
                    yield return(viewModel.GetSceneNode(node));
                }
                break;

            case SearchAxis.AxisType.DocumentSelfAndDescendant:
                yield return(pivot);

                foreach (DocumentNode node in SearchAxis.TraverseDocumentDescendants(pivot.DocumentNode, continueTester, viewModel))
                {
                    yield return(viewModel.GetSceneNode(node));
                }
                break;

            case SearchAxis.AxisType.Self:
                yield return(pivot);

                break;

            case SearchAxis.AxisType.Root:
                yield return(viewModel.GetSceneNode(pivot.DocumentNode.DocumentRoot.RootNode));

                break;

            case SearchAxis.AxisType.StoryboardContainer:
                SceneNode thisStoryboardContainer = (SceneNode)pivot.StoryboardContainer;
                if (thisStoryboardContainer == null)
                {
                    break;
                }
                yield return(thisStoryboardContainer);

                break;

            case SearchAxis.AxisType.StoryboardAncestor:
                for (IStoryboardContainer cur = pivot.StoryboardContainer; cur != null; cur = cur.TargetElement.StoryboardContainer)
                {
                    yield return((SceneNode)cur);

                    if (continueTester != null && !continueTester.Test((SceneNode)cur))
                    {
                        break;
                    }
                }
                break;

            case SearchAxis.AxisType.ActiveStoryboard:
                if (pivot.ViewModel.ActiveStoryboardTimeline == null)
                {
                    break;
                }
                yield return((SceneNode)pivot.ViewModel.ActiveStoryboardTimeline);

                break;

            case SearchAxis.AxisType.Animations:
                StoryboardTimelineSceneNode storyboard = pivot as StoryboardTimelineSceneNode;
                if (storyboard == null)
                {
                    break;
                }
                foreach (TimelineSceneNode timelineSceneNode in (IEnumerable <TimelineSceneNode>)storyboard.Children)
                {
                    yield return((SceneNode)timelineSceneNode);
                }
                break;

            case SearchAxis.AxisType.KeyFrames:
                KeyFrameAnimationSceneNode keyFrameAnimation = pivot as KeyFrameAnimationSceneNode;
                if (keyFrameAnimation == null)
                {
                    break;
                }
                foreach (KeyFrameSceneNode keyFrameSceneNode in keyFrameAnimation.KeyFrames)
                {
                    yield return((SceneNode)keyFrameSceneNode);
                }
                break;

            case SearchAxis.AxisType.SceneAncestor:
                for (SceneNode parent = pivot.Parent; parent != null; parent = parent.Parent)
                {
                    yield return(parent);

                    if (continueTester != null && !continueTester.Test(parent))
                    {
                        break;
                    }
                }
                break;

            case SearchAxis.AxisType.SceneParent:
                SceneNode node1 = pivot.Parent;
                if (node1 == null)
                {
                    break;
                }
                yield return(node1);

                break;

            case SearchAxis.AxisType.SceneChild:
                DocumentCompositeNode docNode = pivot.DocumentNode as DocumentCompositeNode;
                if (docNode == null)
                {
                    break;
                }
                if (docNode.SupportsChildren)
                {
                    ISceneNodeCollection <SceneNode> children = pivot.GetChildren();
                    for (int i = 0; i < children.Count; ++i)
                    {
                        yield return(children[i]);
                    }
                    break;
                }
                foreach (IPropertyId propertyKey in (IEnumerable <IProperty>)docNode.Properties.Keys)
                {
                    SceneNode subNode = pivot.GetLocalValueAsSceneNode(propertyKey);
                    yield return(subNode);
                }
                break;

            case SearchAxis.AxisType.SceneDescendant:
                IEnumerator <SceneNode> descendantEnumerator = (IEnumerator <SceneNode>) new SearchAxis.SceneDescendantTraversalEnumerator(pivot, continueTester);
                while (descendantEnumerator.MoveNext())
                {
                    yield return(descendantEnumerator.Current);
                }
                break;

            case SearchAxis.AxisType.Property:
                IProperty resolvedProperty = pivot.ProjectContext.ResolveProperty(axis.Property);
                if (resolvedProperty == null)
                {
                    break;
                }
                SceneNode node2 = pivot.GetLocalValueAsSceneNode((IPropertyId)resolvedProperty);
                if (node2 == null)
                {
                    break;
                }
                yield return(node2);

                break;

            case SearchAxis.AxisType.CollectionChild:
                SceneNode node3 = pivot.GetChildren()[axis.ChildIndex];
                if (node3 == null)
                {
                    break;
                }
                yield return(node3);

                break;
            }
        }
예제 #24
0
 public PathTimelineItem(TimelineItemManager timelineItemManager, StoryboardTimelineSceneNode parentTimeline, PathAnimationSceneNode pathAnimationSceneNode)
     : base(timelineItemManager, parentTimeline, (AnimationSceneNode)pathAnimationSceneNode)
 {
     this.orientToPathCommand = new DelegateCommand(new DelegateCommand.SimpleEventHandler(this.OrientToPathCommandBinding_Execute));
 }
예제 #25
0
 public TimelineHeader(StoryboardTimelineSceneNode timeline)
 {
     this.timeline = timeline;
 }