From 6f76f453090d8de10acbb812e83fee89a230d094 Mon Sep 17 00:00:00 2001 From: John Lewin Date: Thu, 3 May 2018 14:14:17 -0700 Subject: [PATCH] Revise key bindings to use KeyPressed when applicable - Issue MatterHackers/MCCentral#3288 W key not functioning in Text fields --- ApplicationView/ApplicationController.cs | 197 ++++++++++++----------- 1 file changed, 107 insertions(+), 90 deletions(-) diff --git a/ApplicationView/ApplicationController.cs b/ApplicationView/ApplicationController.cs index 6b003e7bb..b990a2bdc 100644 --- a/ApplicationView/ApplicationController.cs +++ b/ApplicationView/ApplicationController.cs @@ -2142,6 +2142,113 @@ namespace MatterHackers.MatterControl AppContext.RootSystemWindow = systemWindow; // hook up a keyboard watcher to rout keys when not handled by children + + systemWindow.KeyPressed += (s, keyEvent) => + { + var view3D = systemWindow.Descendants().Where((v) => v.ActuallyVisibleOnScreen()).FirstOrDefault(); + var printerTabPage = systemWindow.Descendants().Where((v) => v.ActuallyVisibleOnScreen()).FirstOrDefault(); + var offsetDist = 50; + + if (!keyEvent.Handled + && view3D != null) + { + bool controlKeyDown = Keyboard.IsKeyDown(Keys.Control); + bool shiftKeyDown = Keyboard.IsKeyDown(Keys.Shift); + + switch (keyEvent.KeyChar) + { + case 'c': + case 'C': + if (controlKeyDown) + { + view3D.Scene.Copy(); + keyEvent.Handled = true; + } + break; + + case 'a': + case 'A': + if (controlKeyDown) + { + view3D.SelectAll(); + keyEvent.Handled = true; + } + break; + + + case 's': + case 'S': + if (controlKeyDown) + { + view3D.Save(); + + keyEvent.Handled = true; + } + break; + + case 'v': + case 'V': + if (controlKeyDown) + { + view3D.Scene.Paste(); + + keyEvent.Handled = true; + } + break; + + case 'w': + case 'W': + view3D.ResetView(); + keyEvent.Handled = true; + break; + + case 'x': + case 'X': + if (controlKeyDown) + { + view3D.Scene.Cut(); + + keyEvent.Handled = true; + } + break; + + case 'y': + case 'Y': + if (controlKeyDown) + { + view3D.Scene.UndoBuffer.Redo(); + keyEvent.Handled = true; + } + break; + + case 'z': + case 'Z': + if (controlKeyDown) + { + // undo last operation + view3D.Scene.UndoBuffer.Undo(); + } + else if (shiftKeyDown) + { + // Zoom in + Offset3DView(view3D, new Vector2(0, offsetDist), TrackBallTransformType.Scale); + } + else + { + // Zoom out + Offset3DView(view3D, new Vector2(0, -offsetDist), TrackBallTransformType.Scale); + } + keyEvent.Handled = true; + break; + + case ' ': + view3D.Scene.ClearSelection(); + keyEvent.Handled = true; + break; + } + } + }; + systemWindow.KeyDown += (s, keyEvent) => { var view3D = systemWindow.Descendants().Where((v) => v.ActuallyVisibleOnScreen()).FirstOrDefault(); @@ -2154,90 +2261,6 @@ namespace MatterHackers.MatterControl { switch (keyEvent.KeyCode) { - case Keys.C: - if (keyEvent.Control) - { - view3D.Scene.Copy(); - - keyEvent.Handled = true; - keyEvent.SuppressKeyPress = true; - } - break; - - case Keys.A: - if (keyEvent.Control) - { - view3D.SelectAll(); - keyEvent.Handled = true; - keyEvent.SuppressKeyPress = true; - } - break; - - case Keys.S: - if (keyEvent.Control) - { - view3D.Save(); - - keyEvent.Handled = true; - keyEvent.SuppressKeyPress = true; - } - break; - - case Keys.V: - if (keyEvent.Control) - { - view3D.Scene.Paste(); - - keyEvent.Handled = true; - keyEvent.SuppressKeyPress = true; - } - break; - - case Keys.W: - view3D.ResetView(); - keyEvent.Handled = true; - keyEvent.SuppressKeyPress = true; - break; - - case Keys.X: - if (keyEvent.Control) - { - view3D.Scene.Cut(); - - keyEvent.Handled = true; - keyEvent.SuppressKeyPress = true; - } - break; - - case Keys.Y: - if (keyEvent.Control) - { - view3D.Scene.UndoBuffer.Redo(); - keyEvent.Handled = true; - keyEvent.SuppressKeyPress = true; - } - break; - - case Keys.Z: - if (keyEvent.Control) - { - // undo last opperation - view3D.Scene.UndoBuffer.Undo(); - } - else if(keyEvent.Shift) - { - // Zoom in - Offset3DView(view3D, new Vector2(0, offsetDist), TrackBallTransformType.Scale); - } - else - { - // Zoom out - Offset3DView(view3D, new Vector2(0, -offsetDist), TrackBallTransformType.Scale); - } - keyEvent.Handled = true; - keyEvent.SuppressKeyPress = true; - break; - case Keys.Delete: case Keys.Back: view3D.Scene.DeleteSelection(); @@ -2258,12 +2281,6 @@ namespace MatterHackers.MatterControl } break; - case Keys.Space: - view3D.Scene.ClearSelection(); - keyEvent.Handled = true; - keyEvent.SuppressKeyPress = true; - break; - case Keys.Left: // move or rotate view left Offset3DView(view3D, new Vector2(-offsetDist, 0), arrowKeyOpperation);