Пример #1
0
        private bool ProcessMouseButtonDownMessage(MouseButtonMessage buttonMessage)
        {
            this.CaptureMouseWheelHandler = null;

            //don't allow multiple buttons, it's just cleaner and easier to manage behaviour.
            if (_activeButton != 0)
            {
                _contextMenuEnabled = false;
                return(true);
            }

            _activeButton = buttonMessage.Shortcut.MouseButton;
            _clickCount   = buttonMessage.ClickCount;

            if (StartCaptureHandler(buttonMessage))
            {
                return(true);
            }

            _tile.Select();
            _contextMenuEnabled = (buttonMessage.Shortcut.MouseButton == XMouseButtons.Right);

            _startMousePoint = buttonMessage.Location;

            if (_tile.PresentationImage == null || !_tile.Enabled)
            {
                return(true);
            }

            //give unfocused graphics a chance to focus (in the case of going straight from context menu to a graphic).
            FindHandlingGraphic(TrackHandler);

            return(StartNewHandler(buttonMessage));
        }
Пример #2
0
        private bool ProcessKeyboardMessage(KeyboardButtonMessage keyboardMessage)
        {
            //keyboard up messages are just consumed.
            if (keyboardMessage.ButtonAction == KeyboardButtonMessage.ButtonActions.Up)
            {
                _key = new KeyboardButtonMessage(XKeys.None, KeyboardButtonMessage.ButtonActions.Up);
                return(true);
            }

            _key = keyboardMessage;

            ReleaseCapture(true);
            this.CaptureMouseWheelHandler = null;

            IClickAction action = _shortcutManager.GetKeyboardAction(keyboardMessage.Shortcut);

            Trace.WriteLine(String.Format("Finding shortcut for: {0}", keyboardMessage.Shortcut));
            if (action != null)
            {
                action.Click();
                return(true);
            }

            return(false);
        }
Пример #3
0
            public void SetCaptureHandler(IMouseWheelHandler captureMouseWheelHandler)
            {
                if (_captureMouseWheelHandler == captureMouseWheelHandler)
                {
                    return;
                }

                if (_captureMouseWheelHandler != null)
                {
                    _captureMouseWheelHandler.StopWheel();
                }

                _captureMouseWheelHandler = captureMouseWheelHandler;

                if (_captureMouseWheelHandler == null)
                {
                    _stopTimer = true;
                    return;
                }

                _captureMouseWheelHandler.StartWheel();

                _stopTimer = false;
                SynchronizationContext context = SynchronizationContext.Current;
                WaitCallback           del     = delegate
                {
                    while (!_stopTimer)
                    {
                        Thread.Sleep(10);
                        context.Post(delegate
                        {
                            if (_captureMouseWheelHandler == null)
                            {
                                return;
                            }

                            TimeSpan elapsed = Platform.Time.Subtract(_timeOfLastWheel);
                            if (elapsed.Milliseconds >= WheelStopDelayMilliseconds)
                            {
                                SetCaptureHandler(null);
                            }
                        }
                                     , null);
                    }
                };

                ThreadPool.QueueUserWorkItem(del);
            }
Пример #4
0
            public void SetCaptureHandler(TileController tileController, IMouseWheelHandler captureMouseWheelHandler)
            {
                if (_captureTileController == tileController && _captureMouseWheelHandler == captureMouseWheelHandler)
                {
                    return;
                }

                if (_captureMouseWheelHandler != null)
                {
                    if (_delayedStop != null)
                    {
                        _delayedStop.Dispose();
                        _delayedStop = null;
                    }

                    EventsHelper.Fire(tileController._wheelCaptureChangingEvent, tileController, new ItemEventArgs <IMouseWheelHandler>(null));
                    _captureMouseWheelHandler.StopWheel();
                    _captureTileController._tile.ImageViewer.EventBroker.OnMouseWheelCaptureChanged(new MouseWheelCaptureChangedEventArgs(_captureTileController._tile, false));
                }

                _captureTileController    = tileController;
                _captureMouseWheelHandler = captureMouseWheelHandler;

                if (_captureMouseWheelHandler == null)
                {
                    //This is only needed when the capture mouse wheel handler is not null.
                    _captureTileController = null;
                    if (_delayedStop != null)
                    {
                        _delayedStop.Dispose();
                        _delayedStop = null;
                    }
                    return;
                }

                _delayedStop = new DelayedEventPublisher((s, e) => SetCaptureHandler(tileController, null), WheelStopDelayMilliseconds);

                EventsHelper.Fire(tileController._wheelCaptureChangingEvent, tileController, new ItemEventArgs <IMouseWheelHandler>(_captureMouseWheelHandler));
                _captureMouseWheelHandler.StartWheel();
                _captureTileController._tile.ImageViewer.EventBroker.OnMouseWheelCaptureChanged(new MouseWheelCaptureChangedEventArgs(_captureTileController._tile, true));

                _delayedStop.Publish(this, EventArgs.Empty);
            }
Пример #5
0
        private bool ProcessMouseButtonDownMessage(MouseButtonMessage buttonMessage)
        {
            this.CaptureMouseWheelHandler = null;
            _lastMouseDownProcessedTicks  = Environment.TickCount;

            //don't allow multiple buttons, it's just cleaner and easier to manage behaviour.
            if (_activeButton != 0)
            {
                _contextMenuEnabled = false;
                return(true);
            }

            _activeButton = buttonMessage.Shortcut.MouseButton;
            _clickCount   = buttonMessage.ClickCount;

            if (StartCaptureHandler(buttonMessage))
            {
                return(true);
            }

            _tile.Select();
            _contextMenuEnabled = _clickCount == 1 && _buttonForContextMenu == buttonMessage.Shortcut.MouseButton;
            if (_contextMenuEnabled && _buttonActionForContextMenu == MouseButtonMessage.ButtonActions.Down)
            {
                _delayedContextMenuRequestPublisher.TimeoutMilliseconds = _mouseHoldDownForContextMenuInMilliseconds;
                _delayedContextMenuRequestPublisher.Publish(this, new ItemEventArgs <Point>(buttonMessage.Location));
            }

            _startMousePoint = buttonMessage.Location;

            if (_tile.PresentationImage == null || !_tile.Enabled)
            {
                return(true);
            }

            //give unfocused graphics a chance to focus (in the case of going straight from context menu to a graphic).
            FindHandlingGraphic(TrackHandler);

            return(StartNewHandler(buttonMessage));
        }
Пример #6
0
        private bool ProcessMouseWheelMessage(MouseWheelMessage wheelMessage)
        {
            if (!_tile.Enabled)
            {
                return(true);
            }

            ReleaseCapture(true);

            IMouseWheelHandler handler = _shortcutManager.GetMouseWheelHandler(wheelMessage.Shortcut);

            if (handler != null)
            {
                this.CaptureMouseWheelHandler = handler;

                handler.Wheel(wheelMessage.WheelDelta);
                MouseWheelManager.Instance.OnMouseWheel();
                return(true);
            }

            return(false);
        }
Пример #7
0
        private bool ProcessMouseWheelMessage(MouseWheelMessage wheelMessage)
        {
            if (!_tile.Enabled)
            {
                return(true);
            }

            if (wheelMessage.WheelDelta == 0)
            {
                if (CaptureMouseWheelHandler != null)
                {
                    //NOTE: hack for Webstation; we can't totally discard mouse wheel messages because
                    //they need to reset the timer that releases "wheel capture". So, if we see a wheel delta
                    //of zero, we just don't process the message through the handler, which could cause an unwanted draw.
                    MouseWheelManager.Instance.OnMouseWheel();
                    return(true);
                }

                //Invalid message; do nothing.
                return(false);
            }

            ReleaseCapture(true);

            IMouseWheelHandler handler = _shortcutManager.GetMouseWheelHandler(wheelMessage.Shortcut);

            if (handler != null)
            {
                this.CaptureMouseWheelHandler = handler;
                handler.Wheel(wheelMessage.WheelDelta);

                MouseWheelManager.Instance.OnMouseWheel();
                return(true);
            }

            return(false);
        }
Пример #8
0
		private bool ProcessMouseButtonDownMessage(MouseButtonMessage buttonMessage)
		{
			this.CaptureMouseWheelHandler = null;

			//don't allow multiple buttons, it's just cleaner and easier to manage behaviour.
			if (_activeButton != 0)
			{
				_contextMenuEnabled = false;
				return true;
			}

			_activeButton = buttonMessage.Shortcut.MouseButton;
			_clickCount = buttonMessage.ClickCount;

			if (StartCaptureHandler(buttonMessage))
				return true;

			_tile.Select();
			_contextMenuEnabled = (buttonMessage.Shortcut.MouseButton == XMouseButtons.Right);

			_startMousePoint = buttonMessage.Location;

			if (_tile.PresentationImage == null || !_tile.Enabled)
				return true;

			//give unfocused graphics a chance to focus (in the case of going straight from context menu to a graphic).
			FindHandlingGraphic(TrackHandler);

			return StartNewHandler(buttonMessage);
		}
Пример #9
0
		private bool ProcessMouseWheelMessage(MouseWheelMessage wheelMessage)
		{
			if (!_tile.Enabled)
				return true;

			ReleaseCapture(true);

			IMouseWheelHandler handler = _shortcutManager.GetMouseWheelHandler(wheelMessage.Shortcut);
			if (handler != null)
			{
				this.CaptureMouseWheelHandler = handler;

				handler.Wheel(wheelMessage.WheelDelta);
				MouseWheelManager.Instance.UpdateLastWheelTime();
				return true;
			}

			return false;
		}
Пример #10
0
		private bool ProcessKeyboardMessage(KeyboardButtonMessage keyboardMessage)
		{
			//keyboard up messages are just consumed.
			if (keyboardMessage.ButtonAction == KeyboardButtonMessage.ButtonActions.Up)
				return true;

			ReleaseCapture(true);
			this.CaptureMouseWheelHandler = null;

			IClickAction action = _shortcutManager.GetKeyboardAction(keyboardMessage.Shortcut);
            Trace.WriteLine(String.Format("Finding shortcut for: {0}", keyboardMessage.Shortcut));
			if (action != null)
			{
				action.Click();
				return true;
			}

			return false;
		}
Пример #11
0
			public void SetCaptureHandler(IMouseWheelHandler captureMouseWheelHandler)
			{
				if (_captureMouseWheelHandler == captureMouseWheelHandler)
					return;

				if (_captureMouseWheelHandler != null)
					_captureMouseWheelHandler.StopWheel();

				_captureMouseWheelHandler = captureMouseWheelHandler;

				if (_captureMouseWheelHandler == null)
				{
					_stopTimer = true;
					return;
				}

				_captureMouseWheelHandler.StartWheel();

				_stopTimer = false;
				SynchronizationContext context = SynchronizationContext.Current;
				WaitCallback del = delegate
				                   	{
										while (!_stopTimer)
										{
											Thread.Sleep(10);
											context.Post(delegate
												 	{
														if (_captureMouseWheelHandler == null)
															return;

														TimeSpan elapsed = Platform.Time.Subtract(_timeOfLastWheel);
														if (elapsed.Milliseconds >= WheelStopDelayMilliseconds)
															SetCaptureHandler(null);
												 	}
												, null);
										}
				                   	};

				ThreadPool.QueueUserWorkItem(del);
			}
Пример #12
0
			private MouseWheelManager()
			{
				_captureMouseWheelHandler = null;
				_stopTimer = true;
			}
Пример #13
0
			public void SetCaptureHandler(TileController tileController, IMouseWheelHandler captureMouseWheelHandler)
			{
                if (_captureTileController == tileController && _captureMouseWheelHandler == captureMouseWheelHandler)
					return;

				if (_captureMouseWheelHandler != null)
				{
                    if (_delayedStop != null)
                    {
                        _delayedStop.Dispose();
                        _delayedStop = null;
                    }

                    EventsHelper.Fire(tileController._wheelCaptureChangingEvent, tileController, new ItemEventArgs<IMouseWheelHandler>(null));
                    _captureMouseWheelHandler.StopWheel();
                    _captureTileController._tile.ImageViewer.EventBroker.OnMouseWheelCaptureChanged(new MouseWheelCaptureChangedEventArgs(_captureTileController._tile, false));
				}

			    _captureTileController = tileController;
				_captureMouseWheelHandler = captureMouseWheelHandler;
                
				if (_captureMouseWheelHandler == null)
				{
                    if (_delayedStop != null)
                    {
                        _delayedStop.Dispose();
                        _delayedStop = null;
                    }
                    return;
				}

                _delayedStop = new DelayedEventPublisher((s, e) => SetCaptureHandler(tileController, null), WheelStopDelayMilliseconds);

                EventsHelper.Fire(tileController._wheelCaptureChangingEvent, tileController, new ItemEventArgs<IMouseWheelHandler>(_captureMouseWheelHandler));
                _captureMouseWheelHandler.StartWheel();
                _captureTileController._tile.ImageViewer.EventBroker.OnMouseWheelCaptureChanged(new MouseWheelCaptureChangedEventArgs(_captureTileController._tile, true));

                _delayedStop.Publish(this, EventArgs.Empty);
			}
Пример #14
0
		private bool ProcessMouseWheelMessage(MouseWheelMessage wheelMessage)
		{
			if (!_tile.Enabled)
				return true;

			if (wheelMessage.WheelDelta == 0)
			{
				if (CaptureMouseWheelHandler != null)
				{
					//NOTE: hack for Webstation; we can't totally discard mouse wheel messages because
					//they need to reset the timer that releases "wheel capture". So, if we see a wheel delta
					//of zero, we just don't process the message through the handler, which could cause an unwanted draw.
					MouseWheelManager.Instance.OnMouseWheel();
					return true;
				}

				//Invalid message; do nothing.
				return false;
			}

			ReleaseCapture(true);

			IMouseWheelHandler handler = _shortcutManager.GetMouseWheelHandler(wheelMessage.Shortcut);
			if (handler != null)
			{
				this.CaptureMouseWheelHandler = handler;
				handler.Wheel(wheelMessage.WheelDelta);

				MouseWheelManager.Instance.OnMouseWheel();
				return true;
			}

			return false;
		}
Пример #15
0
		private bool ProcessMouseButtonDownMessage(MouseButtonMessage buttonMessage)
		{
			this.CaptureMouseWheelHandler = null;
			_lastMouseDownProcessedTicks = Environment.TickCount;

			//don't allow multiple buttons, it's just cleaner and easier to manage behaviour.
			if (_activeButton != 0)
			{
				_contextMenuEnabled = false;
				return true;
			}

			_activeButton = buttonMessage.Shortcut.MouseButton;
			_clickCount = buttonMessage.ClickCount;

			if (StartCaptureHandler(buttonMessage))
				return true;

			_tile.Select();
			_contextMenuEnabled = _clickCount == 1 && _buttonForContextMenu == buttonMessage.Shortcut.MouseButton;
			if (_contextMenuEnabled && _buttonActionForContextMenu == MouseButtonMessage.ButtonActions.Down)
			{
				_delayedContextMenuRequestPublisher.TimeoutMilliseconds = _mouseHoldDownForContextMenuInMilliseconds;
				_delayedContextMenuRequestPublisher.Publish(this, new ItemEventArgs<Point>(buttonMessage.Location));
			}

			_startMousePoint = buttonMessage.Location;

			if (_tile.PresentationImage == null || !_tile.Enabled)
				return true;

			//give unfocused graphics a chance to focus (in the case of going straight from context menu to a graphic).
			FindHandlingGraphic(TrackHandler);

			return StartNewHandler(buttonMessage);
		}
Пример #16
0
 private MouseWheelManager()
 {
     _captureMouseWheelHandler = null;
     _stopTimer = true;
 }