示例#1
0
        public static void CreateDefaultTrigger(StoryboardTimelineSceneNode storyboard)
        {
            ITriggerContainer triggerContainer = (ITriggerContainer)storyboard.StoryboardContainer ?? storyboard.ViewModel.RootNode as ITriggerContainer;

            if (triggerContainer == null || !triggerContainer.CanEditTriggers)
            {
                return;
            }
            SceneViewModel  viewModel      = storyboard.ViewModel;
            IProjectContext projectContext = viewModel.ProjectContext;
            IType           type           = projectContext.GetType(triggerContainer.TargetElementType);

            if (type == null)
            {
                return;
            }
            TriggerSourceInformation triggerSource = (TriggerSourceInformation)TriggersHelper.GetDefaultEvent((ITypeResolver)projectContext, type);

            if (!(triggerSource != (TriggerSourceInformation)null))
            {
                return;
            }
            TriggerBaseNode orCreateTrigger = TriggersHelper.FindOrCreateTrigger(triggerSource, triggerContainer, viewModel);

            if (orCreateTrigger == null)
            {
                return;
            }
            TimelineActionNode timelineActionNode = (TimelineActionNode)BeginActionNode.Factory.Instantiate(viewModel);

            timelineActionNode.TargetTimeline = storyboard;
            TriggersHelper.DefaultAddAction(orCreateTrigger, (TriggerActionNode)timelineActionNode);
        }
示例#2
0
        private TriggerModel3 TriggerSubscription_Inserted(object sender, SceneNode basisNode, object basisContent, SceneNode newPathNode)
        {
            TriggerBaseNode trigger       = (TriggerBaseNode)newPathNode;
            TriggerModel3   triggerModel3 = TriggerModel3.ConstructModel(trigger, this);

            if (triggerModel3 != null)
            {
                ITriggerContainer currentContainer = this.CurrentContainer;
                if (currentContainer == null)
                {
                    return((TriggerModel3)null);
                }
                int triggerIndex = this.GetTriggerIndex(currentContainer, trigger);
                if (triggerIndex == -1)
                {
                    return((TriggerModel3)null);
                }
                if (this.ShouldDisplayNoneTrigger)
                {
                    ++triggerIndex;
                }
                this.triggerModels.Insert(triggerIndex, triggerModel3);
                if (trigger == this.TriggerToBeSelected)
                {
                    this.TriggerToBeSelected = (TriggerBaseNode)null;
                    this.SelectedItem        = triggerModel3;
                }
            }
            return(triggerModel3);
        }
示例#3
0
        public void CreateNewEventTrigger()
        {
            if (this.CurrentContainer == null)
            {
                return;
            }
            SceneViewModel    activeSceneViewModel = this.ActiveSceneViewModel;
            SceneDocument     document             = activeSceneViewModel.Document;
            ITriggerContainer currentContainer     = this.CurrentContainer;

            using (SceneEditTransaction editTransaction = document.CreateEditTransaction(StringTable.TriggerChangeUndoUnit))
            {
                IProjectContext projectContext = document.ProjectContext;
                IType           type           = projectContext.GetType(currentContainer.TargetElementType);
                if (type != null)
                {
                    TriggerSourceInformation triggerSource = (TriggerSourceInformation)TriggersHelper.GetDefaultEvent((ITypeResolver)projectContext, type);
                    if (triggerSource != (TriggerSourceInformation)null)
                    {
                        TriggerBaseNode trigger = TriggersHelper.CreateTrigger(triggerSource, activeSceneViewModel);
                        if (trigger != null)
                        {
                            int index = currentContainer.VisualTriggers.Count;
                            if (this.selectedItem != null)
                            {
                                index = this.selectedItem != this.noneTrigger ? currentContainer.VisualTriggers.IndexOf(this.selectedItem.SceneNode) + 1 : 0;
                            }
                            currentContainer.VisualTriggers.Insert(index, trigger);
                            this.TriggerToBeSelected = trigger;
                        }
                    }
                }
                editTransaction.Commit();
            }
        }
示例#4
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);
        }
示例#5
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));
        }
示例#6
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();
        }
示例#7
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);
        }
示例#8
0
        private int GetTriggerIndex(ITriggerContainer container, TriggerBaseNode trigger)
        {
            int num = 0;

            foreach (TriggerBaseNode triggerBaseNode in (IEnumerable <TriggerBaseNode>)container.VisualTriggers)
            {
                if (triggerBaseNode == trigger)
                {
                    return(num);
                }
                if (PlatformTypes.Trigger.IsAssignableFrom((ITypeId)triggerBaseNode.Type) || PlatformTypes.MultiTrigger.IsAssignableFrom((ITypeId)triggerBaseNode.Type) || PlatformTypes.EventTrigger.IsAssignableFrom((ITypeId)triggerBaseNode.Type))
                {
                    ++num;
                }
            }
            return(-1);
        }
示例#9
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);
        }
示例#10
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);
            }
        }
示例#11
0
        public void CreateNewPropertyTrigger()
        {
            if (this.CurrentContainer == null)
            {
                return;
            }
            ITriggerContainer        currentContainer         = this.CurrentContainer;
            SceneViewModel           activeSceneViewModel     = this.ActiveSceneViewModel;
            SceneDocument            document                 = activeSceneViewModel.Document;
            StyleNode                styleNode                = currentContainer as StyleNode;
            FrameworkTemplateElement frameworkTemplateElement = currentContainer as FrameworkTemplateElement;

            using (SceneEditTransaction editTransaction = document.CreateEditTransaction(StringTable.TriggerChangeUndoUnit))
            {
                TriggerSourceInformation triggerSource = (TriggerSourceInformation)null;
                if (styleNode != null || frameworkTemplateElement != null)
                {
                    triggerSource = (TriggerSourceInformation)TriggersHelper.GetDefaultProperty(currentContainer.TargetElementType, document.DocumentContext);
                }
                if (triggerSource != (TriggerSourceInformation)null)
                {
                    TriggerBaseNode trigger = TriggersHelper.CreateTrigger(triggerSource, activeSceneViewModel);
                    if (trigger != null)
                    {
                        int index = currentContainer.VisualTriggers.Count;
                        if (this.selectedItem != null)
                        {
                            index = this.selectedItem != this.noneTrigger ? currentContainer.VisualTriggers.IndexOf(this.selectedItem.SceneNode) + 1 : 0;
                        }
                        currentContainer.VisualTriggers.Insert(index, trigger);
                        activeSceneViewModel.SetActiveTrigger(trigger);
                    }
                }
                editTransaction.Commit();
            }
        }
示例#12
0
 internal TriggerModel3(TriggerBaseNode trigger)
 {
     this.trigger = trigger;
 }