From 6c1c8bf8bd0d8eb5f1277902a5de13d325f115c5 Mon Sep 17 00:00:00 2001 From: Lars Brubaker Date: Mon, 23 Apr 2018 18:48:17 -0700 Subject: [PATCH] Fixing gcode change layer with arrow keys --- ApplicationView/ApplicationController.cs | 33 ++++++++++---- PartPreviewWindow/PrinterTabPage.cs | 57 ++++-------------------- PartPreviewWindow/View3D/View3DWidget.cs | 14 +++--- PartPreviewWindow/ViewControls3D.cs | 28 ++++++++++++ 4 files changed, 67 insertions(+), 65 deletions(-) diff --git a/ApplicationView/ApplicationController.cs b/ApplicationView/ApplicationController.cs index 7bfce74cf..42660dfc3 100644 --- a/ApplicationView/ApplicationController.cs +++ b/ApplicationView/ApplicationController.cs @@ -2107,7 +2107,8 @@ namespace MatterHackers.MatterControl // hook up a keyboard watcher to rout keys when not handled by children systemWindow.KeyDown += (s, keyEvent) => { - var view3D = systemWindow.Visible3DView(); + var view3D = systemWindow.Descendants().Where((v) => v.ActuallyVisibleOnScreen()).FirstOrDefault(); + var printerTabPage = systemWindow.Descendants().Where((v) => v.ActuallyVisibleOnScreen()).FirstOrDefault(); var offsetDist = 50; var arrowKeyOpperation = keyEvent.Shift ? TrackBallTransformType.Translation : TrackBallTransformType.Rotation; @@ -2240,13 +2241,33 @@ namespace MatterHackers.MatterControl break; case Keys.Up: - Offset3DView(view3D, new Vector2(0, offsetDist), arrowKeyOpperation); + if (view3D.Printer != null + && printerTabPage != null + && view3D.Printer.ViewState.ViewMode != PartViewMode.Model) + { + printerTabPage.LayerScrollbar.Value += 1; + } + else + { + Offset3DView(view3D, new Vector2(0, offsetDist), arrowKeyOpperation); + } + keyEvent.Handled = true; keyEvent.SuppressKeyPress = true; break; case Keys.Down: - Offset3DView(view3D, new Vector2(0, -offsetDist), arrowKeyOpperation); + if (view3D.Printer != null + && printerTabPage != null + && view3D.Printer.ViewState.ViewMode != PartViewMode.Model) + { + printerTabPage.LayerScrollbar.Value -= 1; + } + else + { + Offset3DView(view3D, new Vector2(0, -offsetDist), arrowKeyOpperation); + } + keyEvent.Handled = true; keyEvent.SuppressKeyPress = true; break; @@ -2340,12 +2361,6 @@ namespace MatterHackers.MatterControl view3D.TrackballTumbleWidget.Invalidate(); } - static View3DWidget Visible3DView(this SystemWindow systemWindow) - { - return systemWindow.Descendants().Where((v) => v.ActuallyVisibleOnScreen()).FirstOrDefault(); - } - - public static async Task Initialize(SystemWindow systemWindow, Action reporter) { AppContext.Platform = AggContext.CreateInstanceFrom(PlatformFeaturesProvider); diff --git a/PartPreviewWindow/PrinterTabPage.cs b/PartPreviewWindow/PrinterTabPage.cs index e99a4b952..df48aa051 100644 --- a/PartPreviewWindow/PrinterTabPage.cs +++ b/PartPreviewWindow/PrinterTabPage.cs @@ -51,8 +51,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow private View3DConfig gcodeOptions; private DoubleSolidSlider layerRenderRatioSlider; - private SystemWindow parentSystemWindow; - private SliceLayerSelector layerScrollbar; + public SliceLayerSelector LayerScrollbar { get; private set; } internal PrinterConfig printer; private GCodePanel gcodePanel; internal ResizeContainer gcodeContainer; @@ -100,14 +99,14 @@ namespace MatterHackers.MatterControl.PartPreviewWindow printer.ViewState.ViewModeChanged += ViewState_ViewModeChanged; - layerScrollbar = new SliceLayerSelector(printer, sceneContext) + LayerScrollbar = new SliceLayerSelector(printer, sceneContext) { VAnchor = VAnchor.Stretch, HAnchor = HAnchor.Right | HAnchor.Fit, Margin = new BorderDouble(0, 4, 4, 4), Maximum = sceneContext.LoadedGCode?.LayerCount ?? 1 }; - view3DWidget.InteractionLayer.AddChild(layerScrollbar); + view3DWidget.InteractionLayer.AddChild(LayerScrollbar); layerRenderRatioSlider = new DoubleSolidSlider(new Vector2(), SliceLayerSelector.SliderWidth); layerRenderRatioSlider.FirstValue = 0; @@ -288,7 +287,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow return; } - layerScrollbar.Maximum = sceneContext.LoadedGCode.LayerCount; + LayerScrollbar.Maximum = sceneContext.LoadedGCode.LayerCount; } private void SetSliderVisibility() @@ -299,7 +298,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow { SetAnimationPosition(); layerRenderRatioSlider.Visible = false; - layerScrollbar.Visible = false; + LayerScrollbar.Visible = false; } else { @@ -312,7 +311,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow bool hasLayers = printer.Bed.LoadedGCode?.LayerCount > 0; layerRenderRatioSlider.Visible = hasLayers && !view3DWidget.meshViewerWidget.ModelView; - layerScrollbar.Visible = hasLayers && !view3DWidget.meshViewerWidget.ModelView; + LayerScrollbar.Visible = hasLayers && !view3DWidget.meshViewerWidget.ModelView; } } @@ -336,7 +335,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow private void SetSliderSizes() { - if (layerScrollbar == null || view3DWidget == null) + if (LayerScrollbar == null || view3DWidget == null) { return; } @@ -350,7 +349,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow private bool SetAnimationPosition() { - layerScrollbar.Value = printer.Connection.CurrentlyPrintingLayer; + LayerScrollbar.Value = printer.Connection.CurrentlyPrintingLayer; double currentPosition = printer.Connection.RatioIntoCurrentLayer; layerRenderRatioSlider.FirstValue = 0; @@ -398,26 +397,8 @@ namespace MatterHackers.MatterControl.PartPreviewWindow } } - public override void OnLoad(EventArgs args) - { - // Find and hook the parent system window KeyDown event - if (this.Parents().FirstOrDefault() is SystemWindow systemWindow) - { - systemWindow.KeyDown += Parent_KeyDown; - parentSystemWindow = systemWindow; - } - - base.OnLoad(args); - } - public override void OnClosed(ClosedEventArgs e) { - // Find and unhook the parent system window KeyDown event - if (parentSystemWindow != null) - { - parentSystemWindow.KeyDown -= Parent_KeyDown; - } - unregisterEvents?.Invoke(null, null); sceneContext.LoadedGCodeChanged -= BedPlate_LoadedGCodeChanged; @@ -428,28 +409,6 @@ namespace MatterHackers.MatterControl.PartPreviewWindow base.OnClosed(e); } - private void Parent_KeyDown(object sender, KeyEventArgs keyEvent) - { - if (!keyEvent.Handled - && printer.ViewState.ViewMode != PartViewMode.Model) - { - switch (keyEvent.KeyCode) - { - case Keys.Up: - layerScrollbar.Value += 1; - keyEvent.Handled = true; - keyEvent.SuppressKeyPress = true; - break; - - case Keys.Down: - layerScrollbar.Value -= 1; - keyEvent.Handled = true; - keyEvent.SuppressKeyPress = true; - break; - } - } - } - private void AddSettingsTabBar(GuiWidget parent, GuiWidget widgetTodockTo) { sideBar = new DockingTabControl(widgetTodockTo, DockSide.Right, ApplicationController.Instance.ActivePrinter) diff --git a/PartPreviewWindow/View3D/View3DWidget.cs b/PartPreviewWindow/View3D/View3DWidget.cs index 699162072..7467708e6 100644 --- a/PartPreviewWindow/View3D/View3DWidget.cs +++ b/PartPreviewWindow/View3D/View3DWidget.cs @@ -79,7 +79,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow public BedConfig sceneContext; - private PrinterConfig printer; + public PrinterConfig Printer { get; private set; } private PrinterTabPage printerTabPage; @@ -87,7 +87,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow { this.sceneContext = sceneContext; this.printerTabPage = printerTabBase as PrinterTabPage; - this.printer = printer; + this.Printer = printer; this.InteractionLayer = new InteractionLayer(this.World, Scene.UndoBuffer, Scene) { @@ -330,9 +330,9 @@ namespace MatterHackers.MatterControl.PartPreviewWindow public override void OnClosed(ClosedEventArgs e) { - if (printer != null) + if (Printer != null) { - printer.ViewState.SelectedObjectPanelWidth = selectedObjectPanel.Width; + Printer.ViewState.SelectedObjectPanelWidth = selectedObjectPanel.Width; } viewControls3D.TransformStateChanged -= ViewControls3D_TransformStateChanged; @@ -1039,9 +1039,9 @@ namespace MatterHackers.MatterControl.PartPreviewWindow if (!Scene.HasSelection) { - if (printer != null) + if (Printer != null) { - printer.ViewState.SelectedObjectPanelWidth = selectedObjectPanel.Width; + Printer.ViewState.SelectedObjectPanelWidth = selectedObjectPanel.Width; } return; @@ -1117,7 +1117,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow public void Save() { - ApplicationController.Instance.Tasks.Execute("Saving".Localize(), printer.Bed.SaveChanges); + ApplicationController.Instance.Tasks.Execute("Saving".Localize(), Printer.Bed.SaveChanges); } } diff --git a/PartPreviewWindow/ViewControls3D.cs b/PartPreviewWindow/ViewControls3D.cs index 833744a1a..d438ad47e 100644 --- a/PartPreviewWindow/ViewControls3D.cs +++ b/PartPreviewWindow/ViewControls3D.cs @@ -621,6 +621,34 @@ namespace MatterHackers.MatterControl.PartPreviewWindow sceneContext.ClearPlate().ConfigureAwait(false); }); } + }, + new NamedAction() { Title = "----" }, + new NamedAction() + { + Title = "Keyboard Shotcuts".Localize(), + Action = () => + { + UiThread.RunOnIdle(() => + { + List<(string keys, string actoin)> keyAction = new List<(string keys, string actoin)>(new (string, string)[] + { + ("shift z","Zoom in"), + ("z","Zoom out"), + ("← → ↑ ↓","Rotate"), + ("shift ← → ↑ ↓","Pan"), + ("f","Zoom to fit"), + ("w","Zoom to window"), + ("ctrl / ⌘ z","Undo"), + ("ctrl / ⌘ y","Redo"), + ("delete","Delete selection"), + ("space bar","Clear selection"), + ("esc","Cancel command"), + ("enter","Accept command")}); + + // ("Keys","Action"); + DialogWindow.Show(); + }); + } } }; }