public void can_attach_itself_to_an_element_using_a_mouse_gesture()
        {
            var trigger = new GestureMessageTrigger
            {
                Modifiers = ModifierKeys.Control,
                MouseAction = MouseAction.LeftDoubleClick,
                Message = _message
            };

            _node.Expect(x => x.UIElement).Return(_element);


            trigger.Attach(_node);

            Assert.That(trigger.Node, Is.EqualTo(_node));
            Assert.That(_message.InvalidatedHandler, Is.Not.Null);
            Assert.That(_message.InitializeCalledWith, Is.EqualTo(_node));

            var binding = _element.InputBindings[0];
            var gesture = binding.Gesture as MouseGesture;

            Assert.That(binding.Command, Is.EqualTo(new GestureMessageTrigger.GestureCommand(binding.Gesture)));
            Assert.That(gesture.MouseAction, Is.EqualTo(MouseAction.LeftDoubleClick));
            Assert.That(gesture.Modifiers, Is.EqualTo(ModifierKeys.Control));
        }
        public void can_attach_itself_to_an_element_using_a_key_gesture()
        {
            var trigger = new GestureMessageTrigger
            {
                Modifiers = ModifierKeys.Alt,
                Key = Key.S,
                Message = _message
            };

            _node.Expect(x => x.UIElement).Return(_element);


            trigger.Attach(_node);

            Assert.That(trigger.Node, Is.EqualTo(_node));
            Assert.That(_message.InvalidatedHandler, Is.Not.Null);
            Assert.That(_message.InitializeCalledWith, Is.EqualTo(_node));

            var binding = _element.InputBindings[0];
            var gesture = binding.Gesture as UnrestrictedKeyGesture;

            Assert.That(binding.Command, Is.EqualTo(new GestureMessageTrigger.GestureCommand(binding.Gesture)));
            Assert.That(gesture.Key, Is.EqualTo(Key.S));
            Assert.That(gesture.Modifiers, Is.EqualTo(ModifierKeys.Alt));
        }
        public void can_attach_itself_to_an_element_using_a_key_gesture()
        {
            var trigger = new GestureMessageTrigger
            {
                Modifiers = ModifierKeys.Alt,
                Key       = Key.S,
                Message   = message
            };

            node.Expect(x => x.UIElement).Return(element);


            trigger.Attach(node);

            trigger.Node.ShouldBe(node);
            message.InvalidatedHandler.ShouldNotBeNull();
            message.InitializeCalledWith.ShouldBe(node);

            var binding = element.InputBindings[0];
            var gesture = binding.Gesture as UnrestrictedKeyGesture;

            binding.Command.ShouldBe(new GestureMessageTrigger.GestureCommand(binding.Gesture));
            gesture.Key.ShouldBe(Key.S);
            gesture.Modifiers.ShouldBe(ModifierKeys.Alt);
        }
        public void can_attach_itself_to_an_element_using_a_mouse_gesture()
        {
            var trigger = new GestureMessageTrigger
            {
                Modifiers   = ModifierKeys.Control,
                MouseAction = MouseAction.LeftDoubleClick,
                Message     = message
            };

            node.Expect(x => x.UIElement).Return(element);


            trigger.Attach(node);

            trigger.Node.ShouldBe(node);
            message.InvalidatedHandler.ShouldNotBeNull();
            message.InitializeCalledWith.ShouldBe(node);

            var binding = element.InputBindings[0];
            var gesture = binding.Gesture as MouseGesture;

            binding.Command.ShouldBe(new GestureMessageTrigger.GestureCommand(binding.Gesture));
            gesture.MouseAction.ShouldBe(MouseAction.LeftDoubleClick);
            gesture.Modifiers.ShouldBe(ModifierKeys.Control);
        }
        public void throws_exception_if_attempt_to_attach_to_non_UIElement()
        {
            Assert.Throws <CaliburnException>(() => {
                var trigger = new GestureMessageTrigger {
                    Modifiers = ModifierKeys.Alt,
                    Key       = Key.S,
                    Message   = message
                };

                node.Expect(x => x.UIElement).Return(new DependencyObject()).Repeat.Twice();


                trigger.Attach(node);
            });
        }
示例#6
0
        /// <summary>
        /// Parses the specified trigger text.
        /// </summary>
        /// <param name="target">The targeted ui element.</param>
        /// <param name="triggerText">The trigger text.</param>
        /// <returns></returns>
        public IMessageTrigger Parse(DependencyObject target, string triggerText)
        {
            var keyValues = triggerText.Split(new[] { ",", ":" }, StringSplitOptions.RemoveEmptyEntries);
            var trigger   = new GestureMessageTrigger();

            for (int i = 0; i < keyValues.Length; i += 2)
            {
                switch (keyValues[i].Trim())
                {
                case "Key":
#if !SILVERLIGHT
                    trigger.Key = (Key) new KeyConverter()
                                  .ConvertFrom(keyValues[i + 1].Trim());
#else
                    trigger.Key = (Key)Enum.Parse(typeof(Key), keyValues[i + 1].Trim(), true);
#endif
                    break;

                case "Modifiers":
#if !SILVERLIGHT
                    trigger.Modifiers = (ModifierKeys) new ModifierKeysConverter()
                                        .ConvertFrom(keyValues[i + 1].Trim());
#else
                    trigger.Modifiers = (ModifierKeys)Enum.Parse(typeof(ModifierKeys), keyValues[i + 1].Trim(), true);
#endif
                    break;

                case "MouseAction":
#if !SILVERLIGHT
                    trigger.MouseAction = (MouseAction) new MouseActionConverter()
                                          .ConvertFrom(keyValues[i + 1].Trim());
#else
                    trigger.MouseAction = (MouseAction)Enum.Parse(typeof(MouseAction), keyValues[i + 1].Trim(), true);
#endif
                    break;

                default:
                    var exception = new CaliburnException(keyValues[i] + " was not recognized by the gesture trigger parser.");
                    Log.Error(exception);
                    throw exception;
                }
            }

            return(trigger);
        }
        public void can_update_availability()
        {
            var trigger = new GestureMessageTrigger
            {
                Modifiers = ModifierKeys.Alt,
                Key       = Key.S,
                Message   = message
            };

            node.Expect(x => x.UIElement).Return(element);

            node.Expect(x => x.UIElement).Return(element);
            message.AvailabilityEffect.Expect(x => x.ApplyTo(element, false));


            trigger.Attach(node);
            trigger.UpdateAvailabilty(false);
        }
        public void can_trigger_message_processing()
        {
            var trigger = new GestureMessageTrigger
            {
                Modifiers = ModifierKeys.Alt,
                Key       = Key.S,
                Message   = message
            };

            object parameter = new object();

            node.Expect(x => x.UIElement).Return(element);
            node.Expect(x => x.ProcessMessage(Arg <IRoutedMessage> .Is.Equal(message), Arg <object> .Is.Equal(parameter)));


            trigger.Attach(node);
            element.InputBindings[0].Command.Execute(parameter);
        }
        /// <summary>
        /// Parses the specified trigger text.
        /// </summary>
        /// <param name="target">The targeted ui element.</param>
        /// <param name="triggerText">The trigger text.</param>
        /// <returns></returns>
        public IMessageTrigger Parse(DependencyObject target, string triggerText)
        {
            var keyValues = triggerText.Split(new[] {",", ":"}, StringSplitOptions.RemoveEmptyEntries);
            var trigger = new GestureMessageTrigger();

            for(int i = 0; i < keyValues.Length; i += 2)
            {
                switch(keyValues[i].Trim())
                {
                    case "Key":
#if !SILVERLIGHT
                        trigger.Key = (Key)new KeyConverter()
                                               .ConvertFrom(keyValues[i + 1].Trim());
#else
                        trigger.Key = (Key)Enum.Parse(typeof(Key), keyValues[i + 1].Trim(), true);
#endif
                        break;
                    case "Modifiers":
#if !SILVERLIGHT
                        trigger.Modifiers = (ModifierKeys)new ModifierKeysConverter()
                                                              .ConvertFrom(keyValues[i + 1].Trim());
#else
                        trigger.Modifiers = (ModifierKeys)Enum.Parse(typeof(ModifierKeys), keyValues[i + 1].Trim(), true);
#endif
                        break;
                    case "MouseAction":
#if !SILVERLIGHT
                        trigger.MouseAction = (MouseAction)new MouseActionConverter()
                                                               .ConvertFrom(keyValues[i + 1].Trim());
#else
                        trigger.MouseAction = (MouseAction)Enum.Parse(typeof(MouseAction), keyValues[i + 1].Trim(), true);
#endif
                        break;
                    default:
                        var exception = new CaliburnException(keyValues[i] + " was not recognized by the gesture trigger parser.");
                        Log.Error(exception);
                        throw exception;
                }
            }

            return trigger;
        }
        public void represents_availability_consistently_through_ICommand_for_non_disable_availability_when_available()
        {
            message = new FakeMessage {
                AvailabilityEffect = AvailabilityEffect.Hide
            };

            var trigger = new GestureMessageTrigger
            {
                Modifiers = ModifierKeys.Alt,
                Key       = Key.S,
                Message   = message
            };

            node.Expect(x => x.UIElement).Return(element);
            node.Expect(x => x.UIElement).Return(element);


            trigger.Attach(node);
            trigger.UpdateAvailabilty(true);

            element.IsEnabled.ShouldBeTrue();
        }
        public void throws_exception_if_attempt_to_attach_to_non_UIElement()
        {
            var trigger = new GestureMessageTrigger
            {
                Modifiers = ModifierKeys.Alt,
                Key = Key.S,
                Message = _message
            };

            _node.Expect(x => x.UIElement).Return(new DependencyObject()).Repeat.Twice();


            trigger.Attach(_node);
        }
        public void represents_availability_consistently_through_ICommand_for_non_disable_availability_when_available()
        {
            _message = new FakeMessage {AvailabilityEffect = AvailabilityEffect.Hide};

            var trigger = new GestureMessageTrigger
            {
                Modifiers = ModifierKeys.Alt,
                Key = Key.S,
                Message = _message
            };

            _node.Expect(x => x.UIElement).Return(_element);
            _node.Expect(x => x.UIElement).Return(_element);


            trigger.Attach(_node);
            trigger.UpdateAvailabilty(true);

            Assert.That(_element.IsEnabled);
        }
        public void can_update_availability()
        {
            var trigger = new GestureMessageTrigger
            {
                Modifiers = ModifierKeys.Alt,
                Key = Key.S,
                Message = _message
            };

            _node.Expect(x => x.UIElement).Return(_element);

            _node.Expect(x => x.UIElement).Return(_element);
            _message.AvailabilityEffect.Expect(x => x.ApplyTo(_element, false));


            trigger.Attach(_node);
            trigger.UpdateAvailabilty(false);
        }
        public void can_trigger_message_processing()
        {
            var trigger = new GestureMessageTrigger
            {
                Modifiers = ModifierKeys.Alt,
                Key = Key.S,
                Message = _message
            };

            object parameter = new object();

            _node.Expect(x => x.UIElement).Return(_element);
            _node.Expect(x => x.ProcessMessage(Arg<IRoutedMessage>.Is.Equal(_message), Arg<object>.Is.Equal(parameter)));


            trigger.Attach(_node);
            _element.InputBindings[0].Command.Execute(parameter);
        }