Added confirmation message box for unsaved changes when user close image editor by pressing X button, Esc key or right click

This commit is contained in:
Jaex 2018-03-27 17:35:00 +03:00
parent a68245bffd
commit 6b4a7002f3
3 changed files with 81 additions and 55 deletions

View file

@ -100,7 +100,7 @@ public Color CurrentColor
private Font infoFont, infoFontMedium, infoFontBig;
private Stopwatch timerStart, timerFPS;
private int frameCount;
private bool pause, isKeyAllowed;
private bool pause, isKeyAllowed, forceClose;
private RectangleAnimation regionAnimation;
private TextAnimation editorPanTipAnimation;
private Bitmap bmpBackgroundImage;
@ -233,7 +233,6 @@ private void InitializeComponent()
Shown += RegionCaptureForm_Shown;
KeyDown += RegionCaptureForm_KeyDown;
KeyUp += RegionCaptureForm_KeyUp;
MouseDown += RegionCaptureForm_MouseDown;
Resize += RegionCaptureForm_Resize;
LocationChanged += RegionCaptureForm_LocationChanged;
@ -483,27 +482,46 @@ private void RegionCaptureForm_LocationChanged(object sender, EventArgs e)
private void RegionCaptureForm_FormClosing(object sender, FormClosingEventArgs e)
{
if (IsEditorMode && Options.ImageEditorStartMode == ImageEditorStartMode.PreviousState)
if (IsEditorMode)
{
Options.ImageEditorWindowState.UpdateFormState(this);
if (e.CloseReason == CloseReason.UserClosing && !forceClose && !IsFullscreen && !ShowExitConfirmation())
{
e.Cancel = true;
return;
}
if (Options.ImageEditorStartMode == ImageEditorStartMode.PreviousState)
{
Options.ImageEditorWindowState.UpdateFormState(this);
}
}
}
internal bool ShowExitConfirmation()
{
bool result = true;
if (ShapeManager != null && ShapeManager.IsAnnotated)
{
Pause();
// TODO: Translate
result = MessageBox.Show(this, "There is unsaved changes. Would you like to close image editor?", "ShareX - Image editor",
MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes;
Resume();
}
return result;
}
internal void RegionCaptureForm_KeyDown(object sender, KeyEventArgs e)
{
switch (e.KeyData)
{
case Keys.Control | Keys.C:
CopyAreaInfo();
break;
}
}
internal void RegionCaptureForm_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyData == Keys.Escape)
{
Close();
if (!IsEditorMode || ShowExitConfirmation())
{
CloseWindow();
}
return;
}
@ -514,24 +532,27 @@ internal void RegionCaptureForm_KeyUp(object sender, KeyEventArgs e)
isKeyAllowed = true;
switch (e.KeyData)
{
case Keys.Space:
CloseWindow(RegionResult.Fullscreen);
break;
case Keys.Enter:
CloseWindow(RegionResult.Region);
break;
case Keys.Oemtilde:
CloseWindow(RegionResult.ActiveMonitor);
break;
case Keys.Control | Keys.C:
CopyAreaInfo();
break;
}
if (e.KeyData >= Keys.D0 && e.KeyData <= Keys.D9)
{
MonitorKey(e.KeyData - Keys.D0);
return;
}
switch (e.KeyData)
{
case Keys.Space:
Close(RegionResult.Fullscreen);
break;
case Keys.Enter:
Close(RegionResult.Region);
break;
case Keys.Oemtilde:
Close(RegionResult.ActiveMonitor);
break;
}
}
private void RegionCaptureForm_MouseDown(object sender, MouseEventArgs e)
@ -545,7 +566,7 @@ private void RegionCaptureForm_MouseDown(object sender, MouseEventArgs e)
SelectedWindow = ShapeManager.FindSelectedWindow();
}
Close(RegionResult.Region);
CloseWindow(RegionResult.Region);
}
}
@ -560,13 +581,13 @@ private void MonitorKey(int index)
MonitorIndex = index;
Close(RegionResult.Monitor);
CloseWindow(RegionResult.Monitor);
}
internal void Close(RegionResult result)
internal void CloseWindow(RegionResult result = RegionResult.Close)
{
Result = result;
forceClose = true;
Close();
}
@ -1291,7 +1312,7 @@ internal void OnSaveImageRequested()
if (Options.AutoCloseEditorOnTask)
{
Close();
CloseWindow();
TaskEx.Run(() => SaveImageRequested(img, ImageFilePath));
}
else
@ -1309,7 +1330,7 @@ internal void OnSaveImageAsRequested()
if (Options.AutoCloseEditorOnTask)
{
Close();
CloseWindow();
TaskEx.Run(() => SaveImageAsRequested(img, ImageFilePath));
}
else
@ -1327,7 +1348,7 @@ internal void OnCopyImageRequested()
if (Options.AutoCloseEditorOnTask)
{
Close();
CloseWindow();
TaskEx.Run(() => CopyImageRequested(img));
}
else
@ -1345,7 +1366,7 @@ internal void OnUploadImageRequested()
if (Options.AutoCloseEditorOnTask)
{
Close();
CloseWindow();
TaskEx.Run(() => UploadImageRequested(img));
}
else
@ -1363,7 +1384,7 @@ internal void OnPrintImageRequested()
if (Options.AutoCloseEditorOnTask)
{
Close();
CloseWindow();
TaskEx.Run(() => PrintImageRequested(img));
}
else

View file

@ -323,7 +323,7 @@ private void form_MouseUp(object sender, MouseEventArgs e)
}
else
{
Form.Close();
Form.CloseWindow();
}
}
else if (e.Button == MouseButtons.Middle)
@ -354,7 +354,7 @@ private void form_MouseDoubleClick(object sender, MouseEventArgs e)
if (IsCurrentShapeTypeRegion && ValidRegions.Length > 0)
{
Form.UpdateRegionPath();
Form.Close(RegionResult.Region);
Form.CloseWindow(RegionResult.Region);
}
else if (CurrentShape != null && !IsCreating)
{
@ -685,11 +685,14 @@ private void RunAction(RegionCaptureAction action)
case RegionCaptureAction.CancelCapture:
if (Form.Mode == RegionCaptureMode.TaskEditor)
{
Form.Close(RegionResult.AnnotateContinueTask);
if (Form.ShowExitConfirmation())
{
Form.CloseWindow(RegionResult.AnnotateContinueTask);
}
}
else
{
Form.Close();
Form.CloseWindow();
}
break;
case RegionCaptureAction.RemoveShapeCancelCapture:
@ -699,11 +702,14 @@ private void RunAction(RegionCaptureAction action)
}
else if (Form.Mode == RegionCaptureMode.TaskEditor)
{
Form.Close(RegionResult.AnnotateContinueTask);
if (Form.ShowExitConfirmation())
{
Form.CloseWindow(RegionResult.AnnotateContinueTask);
}
}
else
{
Form.Close();
Form.CloseWindow();
}
break;
case RegionCaptureAction.RemoveShape:
@ -713,10 +719,10 @@ private void RunAction(RegionCaptureAction action)
SwapShapeType();
break;
case RegionCaptureAction.CaptureFullscreen:
Form.Close(RegionResult.Fullscreen);
Form.CloseWindow(RegionResult.Fullscreen);
break;
case RegionCaptureAction.CaptureActiveMonitor:
Form.Close(RegionResult.ActiveMonitor);
Form.CloseWindow(RegionResult.ActiveMonitor);
break;
}
}
@ -801,7 +807,7 @@ private void EndRegionSelection()
if (Options.QuickCrop && IsCurrentShapeTypeRegion)
{
Form.UpdateRegionPath();
Form.Close(RegionResult.Region);
Form.CloseWindow(RegionResult.Region);
}
else
{

View file

@ -143,7 +143,7 @@ internal void CreateToolbar()
tsbCompleteEdit.DisplayStyle = ToolStripItemDisplayStyle.Image;
tsbCompleteEdit.Image = Resources.tick;
tsbCompleteEdit.Click += (sender, e) => Form.Close(RegionResult.AnnotateRunAfterCaptureTasks);
tsbCompleteEdit.Click += (sender, e) => Form.CloseWindow(RegionResult.AnnotateRunAfterCaptureTasks);
tsMain.Items.Add(tsbCompleteEdit);
if (Form.Mode == RegionCaptureMode.TaskEditor)
@ -151,13 +151,13 @@ internal void CreateToolbar()
ToolStripButton tsbClose = new ToolStripButton(Resources.ShapeManager_CreateToolbar_ContinueTaskSpaceOrRightClick);
tsbClose.DisplayStyle = ToolStripItemDisplayStyle.Image;
tsbClose.Image = Resources.control;
tsbClose.Click += (sender, e) => Form.Close(RegionResult.AnnotateContinueTask);
tsbClose.Click += (sender, e) => Form.CloseWindow(RegionResult.AnnotateContinueTask);
tsMain.Items.Add(tsbClose);
ToolStripButton tsbCloseCancel = new ToolStripButton(Resources.ShapeManager_CreateToolbar_CancelTaskEsc);
tsbCloseCancel.DisplayStyle = ToolStripItemDisplayStyle.Image;
tsbCloseCancel.Image = Resources.cross;
tsbCloseCancel.Click += (sender, e) => Form.Close(RegionResult.AnnotateCancelTask);
tsbCloseCancel.Click += (sender, e) => Form.CloseWindow(RegionResult.AnnotateCancelTask);
tsMain.Items.Add(tsbCloseCancel);
tsMain.Items.Add(new ToolStripSeparator());
@ -757,7 +757,7 @@ internal void CreateToolbar()
tsmiRegionCapture.Click += (sender, e) =>
{
Form.UpdateRegionPath();
Form.Close(RegionResult.Region);
Form.CloseWindow(RegionResult.Region);
};
tsddbCapture.DropDownItems.Add(tsmiRegionCapture);
@ -765,20 +765,20 @@ internal void CreateToolbar()
{
ToolStripMenuItem tsmiLastRegionCapture = new ToolStripMenuItem(Resources.ShapeManager_CreateToolbar_LastRegion);
tsmiLastRegionCapture.Image = Resources.layers;
tsmiLastRegionCapture.Click += (sender, e) => Form.Close(RegionResult.LastRegion);
tsmiLastRegionCapture.Click += (sender, e) => Form.CloseWindow(RegionResult.LastRegion);
tsddbCapture.DropDownItems.Add(tsmiLastRegionCapture);
}
ToolStripMenuItem tsmiFullscreenCapture = new ToolStripMenuItem(Resources.ShapeManager_CreateContextMenu_Capture_fullscreen);
tsmiFullscreenCapture.Image = Resources.layer_fullscreen;
tsmiFullscreenCapture.ShortcutKeyDisplayString = "Space";
tsmiFullscreenCapture.Click += (sender, e) => Form.Close(RegionResult.Fullscreen);
tsmiFullscreenCapture.Click += (sender, e) => Form.CloseWindow(RegionResult.Fullscreen);
tsddbCapture.DropDownItems.Add(tsmiFullscreenCapture);
ToolStripMenuItem tsmiActiveMonitorCapture = new ToolStripMenuItem(Resources.ShapeManager_CreateContextMenu_Capture_active_monitor);
tsmiActiveMonitorCapture.Image = Resources.monitor;
tsmiActiveMonitorCapture.ShortcutKeyDisplayString = "~";
tsmiActiveMonitorCapture.Click += (sender, e) => Form.Close(RegionResult.ActiveMonitor);
tsmiActiveMonitorCapture.Click += (sender, e) => Form.CloseWindow(RegionResult.ActiveMonitor);
tsddbCapture.DropDownItems.Add(tsmiActiveMonitorCapture);
ToolStripMenuItem tsmiMonitorCapture = new ToolStripMenuItem(Resources.ShapeManager_CreateContextMenu_Capture_monitor);
@ -797,7 +797,7 @@ internal void CreateToolbar()
tsmi.Click += (sender, e) =>
{
Form.MonitorIndex = index;
Form.Close(RegionResult.Monitor);
Form.CloseWindow(RegionResult.Monitor);
};
tsmiMonitorCapture.DropDownItems.Add(tsmi);
}
@ -1015,7 +1015,6 @@ private void MenuForm_KeyDown(object sender, KeyEventArgs e)
private void MenuForm_KeyUp(object sender, KeyEventArgs e)
{
form_KeyUp(sender, e);
Form.RegionCaptureForm_KeyUp(sender, e);
e.Handled = true;
}