Fixing gcode change layer with arrow keys

This commit is contained in:
Lars Brubaker 2018-04-23 18:48:17 -07:00
parent e0f32a0ab1
commit 6c1c8bf8bd
4 changed files with 67 additions and 65 deletions

View file

@ -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<View3DWidget>().Where((v) => v.ActuallyVisibleOnScreen()).FirstOrDefault();
var printerTabPage = systemWindow.Descendants<PrinterTabPage>().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<View3DWidget>().Where((v) => v.ActuallyVisibleOnScreen()).FirstOrDefault();
}
public static async Task<GuiWidget> Initialize(SystemWindow systemWindow, Action<double, string> reporter)
{
AppContext.Platform = AggContext.CreateInstanceFrom<INativePlatformFeatures>(PlatformFeaturesProvider);

View file

@ -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<SystemWindow>().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)

View file

@ -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);
}
}

View file

@ -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<CopyGuestProfilesToUser>();
});
}
}
};
}