Revise key bindings to use KeyPressed when applicable

- Issue MatterHackers/MCCentral#3288
W key not functioning in Text fields
This commit is contained in:
John Lewin 2018-05-03 14:14:17 -07:00
parent 2ffc7fd257
commit 6f76f45309

View file

@ -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<View3DWidget>().Where((v) => v.ActuallyVisibleOnScreen()).FirstOrDefault();
var printerTabPage = systemWindow.Descendants<PrinterTabPage>().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<View3DWidget>().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);