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); }
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); }
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 bool StartNewHandler(MouseButtonMessage buttonMessage) { if (StartNewGraphicHandler()) { return(true); } else { return(StartNewToolHandler(buttonMessage)); } }
private bool StartNewToolHandler(MouseButtonMessage buttonMessage) { foreach (IMouseButtonHandler handler in _shortcutManager.GetMouseButtonHandlers(buttonMessage.Shortcut)) { if (CanStartNewHandler(handler) && StartHandler(handler)) { SetCapture(handler); return(true); } } return(false); }
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); } }
private bool StartNewToolHandler(MouseButtonMessage buttonMessage) { foreach (IMouseButtonHandler handler in _shortcutManager.GetMouseButtonHandlers(buttonMessage.Shortcut)) { if (CanStartNewHandler(handler) && StartHandler(handler)) { SetCapture(handler); return true; } } return false; }
private bool StartNewHandler(MouseButtonMessage buttonMessage) { if (StartNewGraphicHandler()) return true; else return StartNewToolHandler(buttonMessage); }
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; }
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); }
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; }
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); }