示例#1
0
        public static TriggerBaseNode FindOrCreateTrigger(TriggerSourceInformation triggerSource, ITriggerContainer triggerContainer, SceneViewModel viewModel)
        {
            RoutedEventInformation eventInformation    = triggerSource as RoutedEventInformation;
            PropertyInformation    propertyInformation = triggerSource as PropertyInformation;

            foreach (TriggerBaseNode triggerBaseNode in (IEnumerable <TriggerBaseNode>)triggerContainer.VisualTriggers)
            {
                EventTriggerNode eventTriggerNode = triggerBaseNode as EventTriggerNode;
                TriggerNode      triggerNode      = triggerBaseNode as TriggerNode;
                if (eventTriggerNode != null && (TriggerSourceInformation)eventInformation != (TriggerSourceInformation)null && eventTriggerNode.RoutedEvent == eventInformation.RoutedEvent)
                {
                    return((TriggerBaseNode)eventTriggerNode);
                }
                if (triggerNode != null && (TriggerSourceInformation)propertyInformation != (TriggerSourceInformation)null && ((ITriggerConditionNode)triggerNode).PropertyKey == propertyInformation.DependencyProperty)
                {
                    return((TriggerBaseNode)triggerNode);
                }
            }
            TriggerBaseNode trigger = TriggersHelper.CreateTrigger(triggerSource, viewModel);

            if (trigger != null)
            {
                triggerContainer.VisualTriggers.Add(trigger);
            }
            return(trigger);
        }
示例#2
0
        public static TriggerBaseNode CreateTrigger(TriggerSourceInformation triggerSource, SceneViewModel viewModel)
        {
            RoutedEventInformation eventInformation    = triggerSource as RoutedEventInformation;
            PropertyInformation    propertyInformation = triggerSource as PropertyInformation;

            if ((TriggerSourceInformation)eventInformation != (TriggerSourceInformation)null)
            {
                EventTriggerNode eventTriggerNode = EventTriggerNode.Factory.Instantiate(viewModel);
                eventTriggerNode.RoutedEvent = eventInformation.RoutedEvent;
                return((TriggerBaseNode)eventTriggerNode);
            }
            if (!((TriggerSourceInformation)propertyInformation != (TriggerSourceInformation)null))
            {
                return((TriggerBaseNode)null);
            }
            TriggerNode        triggerNode        = (TriggerNode)null;
            DependencyProperty dependencyProperty = propertyInformation.DependencyProperty;

            if (dependencyProperty != null)
            {
                triggerNode = TriggerNode.Factory.Instantiate(viewModel);
                ITriggerConditionNode triggerConditionNode = (ITriggerConditionNode)triggerNode;
                triggerConditionNode.PropertyKey = dependencyProperty;
                triggerConditionNode.Value       = dependencyProperty.DefaultMetadata.DefaultValue;
            }
            return((TriggerBaseNode)triggerNode);
        }
示例#3
0
 public EventTriggerModel(EventTriggerNode trigger)
     : base((TriggerBaseNode)trigger)
 {
     this.eventTrigger        = trigger;
     this.createActionCommand = new DelegateCommand(new DelegateCommand.SimpleEventHandler(this.CreateAction));
     this.actions             = new ActionCollection("Actions", (ICommand)this.createActionCommand);
 }
示例#4
0
        public static string GetDefaultStoryboardName(TriggerBaseNode trigger)
        {
            EventTriggerNode eventTriggerNode = trigger as EventTriggerNode;
            string           suggestion       = "Storyboard";

            if (eventTriggerNode != null)
            {
                suggestion = "On" + eventTriggerNode.RoutedEvent.Name;
            }
            return(trigger.ViewModel.AnimationEditor.GenerateNewTimelineName(trigger.StoryboardContainer, suggestion));
        }
示例#5
0
        public static bool CanDeleteTrigger(TriggerBaseNode triggerNode)
        {
            List <SceneNode> list = new List <SceneNode>();

            foreach (SceneNode sceneNode in (IEnumerable <TriggerActionNode>)triggerNode.EnterActions)
            {
                list.Add(sceneNode);
            }
            foreach (SceneNode sceneNode in (IEnumerable <TriggerActionNode>)triggerNode.ExitActions)
            {
                list.Add(sceneNode);
            }
            EventTriggerNode eventTriggerNode = triggerNode as EventTriggerNode;

            if (eventTriggerNode != null)
            {
                list.AddRange((IEnumerable <SceneNode>)eventTriggerNode.Actions);
            }
            foreach (SceneNode sceneNode in list)
            {
                BeginActionNode beginActionNode = sceneNode as BeginActionNode;
                if (beginActionNode != null && beginActionNode.TargetTimeline != null)
                {
                    bool flag1 = false;
                    bool flag2 = false;
                    foreach (TimelineActionNode timelineActionNode in beginActionNode.TargetTimeline.ControllingActions)
                    {
                        if (!list.Contains((SceneNode)timelineActionNode))
                        {
                            if (timelineActionNode is BeginActionNode && timelineActionNode != beginActionNode)
                            {
                                flag2 = true;
                            }
                            else if (timelineActionNode is ControllableStoryboardActionNode)
                            {
                                flag1 = true;
                            }
                        }
                    }
                    if (!flag2 && flag1)
                    {
                        return(false);
                    }
                }
            }
            return(true);
        }
示例#6
0
        internal static TriggerModel3 ConstructModel(TriggerBaseNode trigger, TriggerModelManager triggerManager)
        {
            EventTriggerNode trigger1      = trigger as EventTriggerNode;
            BaseTriggerNode  trigger2      = trigger as BaseTriggerNode;
            TriggerModel3    triggerModel3 = (TriggerModel3)null;

            if (trigger1 != null)
            {
                triggerModel3 = (TriggerModel3) new EventTriggerModel(trigger1);
            }
            else if (trigger2 != null)
            {
                triggerModel3 = (TriggerModel3) new PropertyTriggerModel(trigger2, triggerManager);
            }
            if (triggerModel3 != null)
            {
                triggerModel3.Initialize();
            }
            return(triggerModel3);
        }
示例#7
0
        public static void DefaultAddAction(TriggerBaseNode trigger, TriggerActionNode action)
        {
            TriggerNode      triggerNode      = trigger as TriggerNode;
            MultiTriggerNode multiTriggerNode = trigger as MultiTriggerNode;
            EventTriggerNode eventTriggerNode = trigger as EventTriggerNode;

            if (triggerNode != null)
            {
                triggerNode.EnterActions.Add(action);
            }
            else if (multiTriggerNode != null)
            {
                multiTriggerNode.EnterActions.Add(action);
            }
            else
            {
                if (eventTriggerNode == null)
                {
                    return;
                }
                eventTriggerNode.Actions.Add((SceneNode)action);
            }
        }
示例#8
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);
        }