mirror of
https://github.com/ShareX/ShareX.git
synced 2024-09-30 01:07:21 +13:00
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:
parent
a68245bffd
commit
6b4a7002f3
3 changed files with 81 additions and 55 deletions
|
@ -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
|
||||
|
|
|
@ -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
|
||||
{
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue