From a38c79e46c944d3a169f6c12f9035e17f4d71a78 Mon Sep 17 00:00:00 2001 From: Jaex Date: Mon, 15 Aug 2016 23:48:27 +0300 Subject: [PATCH] Added undo shape keybind (ctrl + z) --- .../Shapes/ShapeManager.cs | 108 +++++++++++------- 1 file changed, 66 insertions(+), 42 deletions(-) diff --git a/ShareX.ScreenCaptureLib/Shapes/ShapeManager.cs b/ShareX.ScreenCaptureLib/Shapes/ShapeManager.cs index 769cb6e74..db0e259d1 100644 --- a/ShareX.ScreenCaptureLib/Shapes/ShapeManager.cs +++ b/ShareX.ScreenCaptureLib/Shapes/ShapeManager.cs @@ -85,7 +85,7 @@ private set UpdateCursor(); } - DeselectShape(); + DeselectCurrentShape(); OnCurrentShapeTypeChanged(currentShapeType); } @@ -284,7 +284,7 @@ private void CreateContextMenu() tsmiDeleteAll = new ToolStripMenuItem(Resources.ShapeManager_CreateContextMenu_Delete_all_objects); tsmiDeleteAll.Image = Resources.minus; - tsmiDeleteAll.Click += (sender, e) => ClearAll(); + tsmiDeleteAll.Click += (sender, e) => DeleteAllShapes(); cmsContextMenu.Items.Add(tsmiDeleteAll); #endregion Selected object @@ -921,16 +921,6 @@ private void form_KeyDown(object sender, KeyEventArgs e) case Keys.Menu: IsSnapResizing = true; break; - case Keys.Insert: - if (IsCreating) - { - EndRegionSelection(); - } - else - { - StartRegionSelection(); - } - break; case Keys.Left: case Keys.A: isLeftPressed = true; @@ -949,9 +939,26 @@ private void form_KeyDown(object sender, KeyEventArgs e) break; } + switch (e.KeyData) + { + case Keys.Insert: + if (IsCreating) + { + EndRegionSelection(); + } + else + { + StartRegionSelection(); + } + break; + case Keys.Control | Keys.Z: + UndoShape(); + break; + } + if (form.Mode == RectangleRegionMode.Annotation && !IsCreating) { - switch (e.KeyCode) + switch (e.KeyData) { case Keys.Tab: SwapShapeType(); @@ -1059,14 +1066,6 @@ private void form_KeyUp(object sender, KeyEventArgs e) case Keys.Menu: IsSnapResizing = false; break; - case Keys.Delete: - DeleteCurrentShape(); - - if (IsCreating) - { - EndRegionSelection(); - } - break; case Keys.Left: case Keys.A: isLeftPressed = false; @@ -1085,9 +1084,21 @@ private void form_KeyUp(object sender, KeyEventArgs e) break; } + switch (e.KeyData) + { + case Keys.Delete: + DeleteCurrentShape(); + + if (IsCreating) + { + EndRegionSelection(); + } + break; + } + if (form.Mode == RectangleRegionMode.Annotation) { - switch (e.KeyCode) + switch (e.KeyData) { case Keys.Apps: OpenOptionsMenu(); @@ -1168,7 +1179,7 @@ private void StartRegionSelection() } else if (!IsCreating) // Create new shape { - DeselectShape(); + DeselectCurrentShape(); shape = AddShape(); @@ -1502,38 +1513,43 @@ private void SelectIntersectShape() } } - private void DeselectShape() + private void DeselectShape(BaseShape shape) { - CurrentShape = null; - NodesVisible = false; + if (shape == CurrentShape) + { + CurrentShape = null; + NodesVisible = false; + } + } + + private void DeselectCurrentShape() + { + DeselectShape(CurrentShape); + } + + private void DeleteShape(BaseShape shape) + { + if (shape != null) + { + Shapes.Remove(shape); + DeselectShape(shape); + } } private void DeleteCurrentShape() { - BaseShape shape = CurrentShape; - - if (shape != null) - { - Shapes.Remove(shape); - DeselectShape(); - } + DeleteShape(CurrentShape); } private void DeleteIntersectShape() { - BaseShape shape = GetIntersectShape(); - - if (shape != null) - { - Shapes.Remove(shape); - DeselectShape(); - } + DeleteShape(GetIntersectShape()); } - private void ClearAll() + private void DeleteAllShapes() { Shapes.Clear(); - DeselectShape(); + DeselectCurrentShape(); } public BaseShape GetIntersectShape() @@ -1561,6 +1577,14 @@ public bool IsShapeIntersect() return GetIntersectShape() != null; } + public void UndoShape() + { + if (Shapes.Count > 0) + { + DeleteShape(Shapes[Shapes.Count - 1]); + } + } + private void UpdateNodes() { BaseShape shape = CurrentShape;