Beispiel #1
0
        private bool StartCaptureHandler(MouseButtonMessage buttonMessage)
        {
            if (this.CaptureHandler == null)
            {
                return(false);
            }

            if (SuppressContextMenu(this.CaptureHandler))
            {
                _contextMenuEnabled = false;
            }

            if (CancelStartDueToDoubleClick())
            {
                Trace.WriteLine(String.Format("Double-click release {0}", this.CaptureHandler.GetType()));
                ReleaseCapture(true);

                StartNewHandler(buttonMessage);
            }
            else
            {
                Trace.WriteLine(String.Format("Start (Clicks: {0}, Count: {1})", _clickCount, _startCount));
                StartHandler(this.CaptureHandler);
                SetCursorToken();
            }

            //we only release capture on button up, so just consume.
            return(true);
        }
Beispiel #2
0
        private bool ProcessMouseButtonUpMessage(MouseButtonMessage buttonMessage)
        {
            if (_activeButton != buttonMessage.Shortcut.MouseButton)
            {
                return(true);
            }

            _activeButton = 0;
            _clickCount   = 0;

            if (this.CaptureHandler != null)
            {
                if (StopHandler(this.CaptureHandler))
                {
                    if (_capturedOnThisClick && !HasMoved(buttonMessage.Location) && buttonMessage.Shortcut.MouseButton == XMouseButtons.Right)
                    {
                        _delayedContextMenuRequestPublisher.Publish(this, new ItemEventArgs <Point>(buttonMessage.Location));
                    }

                    return(true);
                }

                //Trace.WriteLine(String.Format("Release capture {0}", this.CaptureHandler.GetType()));

                ReleaseCapture(false);
                return(true);
            }

            return(false);
        }
Beispiel #3
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));
        }
        private bool ProcessMouseButtonUpMessage(MouseButtonMessage buttonMessage)
        {
            var timeElapsedSinceMouseDown = _lastMouseDownProcessedTicks.HasValue
                                ? TimeSpan.FromMilliseconds(Environment.TickCount - _lastMouseDownProcessedTicks.Value).TotalMilliseconds
                                : 0.0;

            _lastMouseDownProcessedTicks = null;

            if (_activeButton != buttonMessage.Shortcut.MouseButton)
            {
                return(true);
            }

            _activeButton = 0;
            _clickCount   = 0;

            var requestContextMenu = _buttonForContextMenu == buttonMessage.Shortcut.MouseButton &&
                                     _buttonActionForContextMenu == MouseButtonMessage.ButtonActions.Up &&
                                     !HasMoved(buttonMessage.Location) &&
                                     (_mouseHoldDownForContextMenuInMilliseconds == 0 || timeElapsedSinceMouseDown >= _mouseHoldDownForContextMenuInMilliseconds);

            if (this.CaptureHandler != null)
            {
                if (StopHandler(this.CaptureHandler))
                {
                    if (_capturedOnThisClick && requestContextMenu)
                    {
                        _delayedContextMenuRequestPublisher.TimeoutMilliseconds = _contextMenuDelayInMilliseconds;
                        _delayedContextMenuRequestPublisher.Publish(this, new ItemEventArgs <Point>(buttonMessage.Location));
                    }

                    return(true);
                }

                if (requestContextMenu)
                {
                    // Request the context menu right away
                    _contextMenuEnabled = true;
                    EventsHelper.Fire(_contextMenuRequested, this, new ItemEventArgs <Point>(buttonMessage.Location));
                }

                //Trace.WriteLine(String.Format("Release capture {0}", this.CaptureHandler.GetType()));

                ReleaseCapture(false);
                return(true);
            }

            if (requestContextMenu)
            {
                // Request the context menu right away
                _contextMenuEnabled = true;
                EventsHelper.Fire(_contextMenuRequested, this, new ItemEventArgs <Point>(buttonMessage.Location));
            }

            return(false);
        }
Beispiel #5
0
 private bool StartNewHandler(MouseButtonMessage buttonMessage)
 {
     if (StartNewGraphicHandler())
     {
         return(true);
     }
     else
     {
         return(StartNewToolHandler(buttonMessage));
     }
 }
Beispiel #6
0
        private bool StartNewToolHandler(MouseButtonMessage buttonMessage)
        {
            foreach (IMouseButtonHandler handler in _shortcutManager.GetMouseButtonHandlers(buttonMessage.Shortcut))
            {
                if (CanStartNewHandler(handler) && StartHandler(handler))
                {
                    SetCapture(handler);
                    return(true);
                }
            }

            return(false);
        }
Beispiel #7
0
        private bool ProcessMouseButtonMessage(MouseButtonMessage buttonMessage)
        {
            this.Location = buttonMessage.Location;

            bool returnValue;

            if (buttonMessage.ButtonAction == MouseButtonMessage.ButtonActions.Down)
            {
                _selectedOnThisClick = !_tile.Selected;
                _capturedOnThisClick = this.CaptureHandler == null;
                returnValue          = ProcessMouseButtonDownMessage(buttonMessage);
                _capturedOnThisClick = _capturedOnThisClick && (this.CaptureHandler != null);
                _selectedOnThisClick = false;
            }
            else
            {
                returnValue = ProcessMouseButtonUpMessage(buttonMessage);
            }

            return(returnValue);
        }
        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));
        }
        private void ProcessDelayedContextMenuRequest(object sender, EventArgs e)
        {
            var eventArgs = e as ItemEventArgs <Point>;

            if (eventArgs == null)
            {
                return;
            }

            if (HasMoved(eventArgs.Item, _currentMousePoint, _mouseMovedToleranceInPixel))
            {
                return;
            }

            // Touch events are simulated as Left mouse button, which causes problem because the framework tools/graphics assumes right click will bring up RCCM.
            // Release previous capture and re-capture using a simulated right click.
            ReleaseCapture(true);
            _activeButton = XMouseButtons.Right;
            var simulatedRightMouseClick = new MouseButtonMessage(((ItemEventArgs <Point>)e).Item, XMouseButtons.Right, MouseButtonMessage.ButtonActions.Down, 1);

            StartNewHandler(simulatedRightMouseClick);

            //When we show the context menu, reset the active button and start count,
            //because the user is going to have to start over again with a new click.
            _activeButton = 0;
            _startCount   = 0;

            _contextMenuEnabled = true;
            EventsHelper.Fire(_contextMenuRequested, this, eventArgs);

            // Release capture only after firing context menu requested, so the ContextMenuProvider stays the same
            if (CaptureHandler != null)
            {
                ReleaseCapture(true);
            }
        }
Beispiel #10
0
		private bool StartNewToolHandler(MouseButtonMessage buttonMessage)
		{
			foreach (IMouseButtonHandler handler in _shortcutManager.GetMouseButtonHandlers(buttonMessage.Shortcut))
			{
				if (CanStartNewHandler(handler) && StartHandler(handler))
				{
					SetCapture(handler);
					return true;
				}
			}

			return false;
		}
Beispiel #11
0
		private bool StartNewHandler(MouseButtonMessage buttonMessage)
		{
			if (StartNewGraphicHandler())
				return true;
			else 
				return StartNewToolHandler(buttonMessage);
		}
Beispiel #12
0
		private bool StartCaptureHandler(MouseButtonMessage buttonMessage)
		{
			if (this.CaptureHandler == null)
				return false;

			if (SuppressContextMenu(this.CaptureHandler))
				_contextMenuEnabled = false;

			if (CancelStartDueToDoubleClick())
			{
				Trace.WriteLine(String.Format("Double-click release {0}", this.CaptureHandler.GetType()));
				ReleaseCapture(true);

				StartNewHandler(buttonMessage);
			}
			else
			{
				Trace.WriteLine(String.Format("Start (Clicks: {0}, Count: {1})", _clickCount, _startCount));
				StartHandler(this.CaptureHandler);
				SetCursorToken();
			}

			//we only release capture on button up, so just consume.
			return true;
		}
Beispiel #13
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);
		}
		private bool ProcessMouseButtonUpMessage(MouseButtonMessage buttonMessage)
		{
			var timeElapsedSinceMouseDown = _lastMouseDownProcessedTicks.HasValue
				? TimeSpan.FromMilliseconds(Environment.TickCount - _lastMouseDownProcessedTicks.Value).TotalMilliseconds
				: 0.0;
			_lastMouseDownProcessedTicks = null;

			if (_activeButton != buttonMessage.Shortcut.MouseButton)
				return true;

			_activeButton = 0;
			_clickCount = 0;

			var requestContextMenu = _buttonForContextMenu == buttonMessage.Shortcut.MouseButton &&
					_buttonActionForContextMenu == MouseButtonMessage.ButtonActions.Up &&
					!HasMoved(buttonMessage.Location) &&
					(_mouseHoldDownForContextMenuInMilliseconds == 0 || timeElapsedSinceMouseDown >= _mouseHoldDownForContextMenuInMilliseconds);

			if (this.CaptureHandler != null)
			{
				if (StopHandler(this.CaptureHandler))
				{
					if (_capturedOnThisClick && requestContextMenu)
					{
						_delayedContextMenuRequestPublisher.TimeoutMilliseconds = _contextMenuDelayInMilliseconds;
						_delayedContextMenuRequestPublisher.Publish(this, new ItemEventArgs<Point>(buttonMessage.Location));
					}

					return true;
				}

				if (requestContextMenu)
				{
					// Request the context menu right away
					_contextMenuEnabled = true;
					EventsHelper.Fire(_contextMenuRequested, this, new ItemEventArgs<Point>(buttonMessage.Location));
				}

                //Trace.WriteLine(String.Format("Release capture {0}", this.CaptureHandler.GetType()));

				ReleaseCapture(false);
				return true;
			}

			if (requestContextMenu)
			{
				// Request the context menu right away
				_contextMenuEnabled = true;
				EventsHelper.Fire(_contextMenuRequested, this, new ItemEventArgs<Point>(buttonMessage.Location));
			}

			return false;
		}
		private void ProcessDelayedContextMenuRequest(object sender, EventArgs e)
		{
            var eventArgs = e as ItemEventArgs<Point>;
			if (eventArgs == null)
				return;

		    if (HasMoved(eventArgs.Item, _currentMousePoint, _mouseMovedToleranceInPixel))
                return;

			// Touch events are simulated as Left mouse button, which causes problem because the framework tools/graphics assumes right click will bring up RCCM.
			// Release previous capture and re-capture using a simulated right click.
			ReleaseCapture(true);
			_activeButton = XMouseButtons.Right;
			var simulatedRightMouseClick = new MouseButtonMessage(((ItemEventArgs<Point>)e).Item, XMouseButtons.Right, MouseButtonMessage.ButtonActions.Down, 1);
			StartNewHandler(simulatedRightMouseClick);

		    //When we show the context menu, reset the active button and start count,
            //because the user is going to have to start over again with a new click.
            _activeButton = 0;
		    _startCount = 0;

		    _contextMenuEnabled = true;
		    EventsHelper.Fire(_contextMenuRequested, this, eventArgs);

			// Release capture only after firing context menu requested, so the ContextMenuProvider stays the same
			if (CaptureHandler != null)
				ReleaseCapture(true);
		}
Beispiel #16
0
		private bool ProcessMouseButtonUpMessage(MouseButtonMessage buttonMessage)
		{
			if (_activeButton != buttonMessage.Shortcut.MouseButton)
				return true;

			_activeButton = 0;
			_clickCount = 0;

			if (this.CaptureHandler != null)
			{
				if (StopHandler(this.CaptureHandler))
				{
					if (_capturedOnThisClick && !HasMoved(buttonMessage.Location) && buttonMessage.Shortcut.MouseButton == XMouseButtons.Right)
						_delayedContextMenuRequestPublisher.Publish(this, new ItemEventArgs<Point>(buttonMessage.Location));

					return true;
				}

                //Trace.WriteLine(String.Format("Release capture {0}", this.CaptureHandler.GetType()));

				ReleaseCapture(false);
				return true;
			}

			return false;
		}
Beispiel #17
0
		private bool ProcessMouseButtonMessage(MouseButtonMessage buttonMessage)
		{
			this.Location = buttonMessage.Location;

			bool returnValue;
			if (buttonMessage.ButtonAction == MouseButtonMessage.ButtonActions.Down)
			{
				_selectedOnThisClick = !_tile.Selected;
				_capturedOnThisClick = this.CaptureHandler == null;
				returnValue = ProcessMouseButtonDownMessage(buttonMessage);
				_capturedOnThisClick = _capturedOnThisClick && (this.CaptureHandler != null);
				_selectedOnThisClick = false;
			}
			else
			{
				returnValue = ProcessMouseButtonUpMessage(buttonMessage);
			}

			return returnValue;
		}
		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);
		}