Fixing gcode change layer with arrow keys
This commit is contained in:
parent
e0f32a0ab1
commit
6c1c8bf8bd
4 changed files with 67 additions and 65 deletions
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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>();
|
||||
});
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue