From e76c2afa08be89f5f9c82eaf1c1d063367576775 Mon Sep 17 00:00:00 2001 From: Milan Hanajik Date: Thu, 20 Jul 2017 14:51:03 +0300 Subject: [PATCH] Camera.Display.DisplayForm.CloseForm(sender, args) added, no conflict with other modeless forms, ver. 2.14.613 --- .../GenericDevices/IHasCompleted.cs | 1 - .../Network/Camera/Display/Display.cs | 26 ++--- .../Network/Camera/Display/DisplayForm.cs | 108 ++++++++++-------- TestBenchFramework/Properties/AssemblyInfo.cs | 4 +- 4 files changed, 73 insertions(+), 66 deletions(-) diff --git a/TestBenchFramework/BenchControl/GenericDevices/IHasCompleted.cs b/TestBenchFramework/BenchControl/GenericDevices/IHasCompleted.cs index 812d4c973..bf2ec9d00 100644 --- a/TestBenchFramework/BenchControl/GenericDevices/IHasCompleted.cs +++ b/TestBenchFramework/BenchControl/GenericDevices/IHasCompleted.cs @@ -8,6 +8,5 @@ namespace TBF.BenchControl.GenericDevices interface IHasCompleted { bool Completed { get; } - void StartForceCloseHandler(); } } diff --git a/TestBenchFramework/BenchControl/Network/Camera/Display/Display.cs b/TestBenchFramework/BenchControl/Network/Camera/Display/Display.cs index 17c962a02..82446f229 100644 --- a/TestBenchFramework/BenchControl/Network/Camera/Display/Display.cs +++ b/TestBenchFramework/BenchControl/Network/Camera/Display/Display.cs @@ -55,20 +55,20 @@ namespace TBF.BenchControl.Network.Camera.Display - System.Windows.Forms.Form modelessDlg; + DisplayForm displayForm; /// delegate void DisplayFormDlgt(Display myRef); /// void OpenStaticImageDisplay(Display myRef) { - myRef.modelessDlg = new DisplayForm(imageFileNames, title); - modelessDlg.Show(); + myRef.displayForm = new DisplayForm(imageFileNames, title); + displayForm.Show(); } /// void OpenLiveStreamDisplay(Display myRef) { - myRef.modelessDlg = new DisplayForm(imageFileNames, title); - modelessDlg.Show(); + myRef.displayForm = new DisplayForm(imageFileNames, title); + displayForm.Show(); } @@ -120,17 +120,17 @@ namespace TBF.BenchControl.Network.Camera.Display /// Event.None public Event Run() { - if ((modelessDlg is IHasCompleted) && !(modelessDlg as IHasCompleted).Completed) + if (displayForm.Completed) { return Event.ModelessFormIsOpen; } - if ((result == DialogResult.None) && modelessDlg is DisplayForm) + if (result == DialogResult.None) { /// Save the result (once) - selectedImages = (modelessDlg as DisplayForm).SelectedImages; - result = (modelessDlg as DisplayForm).Result; - modelessDlg = null; + selectedImages = displayForm.SelectedImages; + result = displayForm.Result; + displayForm = null; } if (result == DialogResult.OK) return Event.OK; @@ -142,10 +142,10 @@ namespace TBF.BenchControl.Network.Camera.Display /// Stop this operation public void Stop() { - if (modelessDlg is IHasCompleted) + if (displayForm != null) { - UiBridge.Bridge.OnCloseModelessForm(this, null); - modelessDlg = null; + displayForm.CloseForm(this, null); + displayForm = null; } currentOp = CurrentOp.None; } diff --git a/TestBenchFramework/BenchControl/Network/Camera/Display/DisplayForm.cs b/TestBenchFramework/BenchControl/Network/Camera/Display/DisplayForm.cs index 5d503d09e..dd6a72ac2 100644 --- a/TestBenchFramework/BenchControl/Network/Camera/Display/DisplayForm.cs +++ b/TestBenchFramework/BenchControl/Network/Camera/Display/DisplayForm.cs @@ -14,6 +14,36 @@ namespace TBF.BenchControl.Network.Camera.Display { private static readonly ILog log = LogManager.GetLogger(typeof(DisplayForm)); + #region Closing this display from another thread + + /// + /// Called from the state machine when an operation forces a modeless dialog close. + /// + public void CloseForm(object sender, EventArgs args) + { + if (CloseFormHandler == null) return; + try { CloseFormHandler(sender, null); } + catch (Exception e) { log.Error("CloseFormHandler(...) failed", e); } + } + public event EventHandler CloseFormHandler; + + public void StartCloseFormHandler() + { + CloseFormHandler += delegate(object sender, EventArgs args) + { + if (InvokeRequired) { Invoke(new EventHandler(OnCloseForm), sender, args); } + else OnCloseForm(sender, args); + }; + } + + private void OnCloseForm(object sender, EventArgs args) + { + DialogResult = DialogResult.Cancel; + Close(); + } + + #endregion + /// Number of text boxes for serial numbers readonly string[] imageFileNames; readonly int imagesCount; @@ -75,7 +105,7 @@ namespace TBF.BenchControl.Network.Camera.Display Result = DialogResult.None; completed = false; - StartForceCloseHandler(); + StartCloseFormHandler(); } /// Parameterless constructor for all watermeters @@ -91,7 +121,7 @@ namespace TBF.BenchControl.Network.Camera.Display abortButton.Text = Strings.Abort; myTimer = new Timer(); - myTimer.Interval = (500); // 45 mins + myTimer.Interval = (500); myTimer.Tick += new EventHandler(MyTimer_Tick); myTimer.Start(); } @@ -112,6 +142,32 @@ namespace TBF.BenchControl.Network.Camera.Display } + private void okButton_Click(object sender, EventArgs e) + { + Result = DialogResult.OK; + CloseAfterButtonClick(); + } + + private void abortButton_Click(object sender, EventArgs e) + { + Result = DialogResult.Abort; + CloseAfterButtonClick(); + } + + private void retryButton_Click(object sender, EventArgs e) + { + Result = DialogResult.Retry; + CloseAfterButtonClick(); + } + + void CloseAfterButtonClick() + { + if (myTimer != null) myTimer.Stop(); + UpdateData(); + completed = true; + Close(); + } + void UpdateData() { for (int i = 0; i < Math.Min(imagesCount, boxesCount); i++) @@ -119,53 +175,5 @@ namespace TBF.BenchControl.Network.Camera.Display SelectedImages[i] = checkBoxes[i].Checked; } } - - - private void okButton_Click(object sender, EventArgs e) - { - if (myTimer != null) myTimer.Stop(); - UpdateData(); - Result = DialogResult.OK; - completed = true; - Close(); - } - - private void abortButton_Click(object sender, EventArgs e) - { - if (myTimer != null) myTimer.Stop(); - UpdateData(); - Result = DialogResult.Abort; - completed = true; - Close(); - } - - private void retryButton_Click(object sender, EventArgs e) - { - if (myTimer != null) myTimer.Stop(); - UpdateData(); - Result = DialogResult.Retry; - completed = true; - Close(); - } - - - #region Forced close handling - - public void StartForceCloseHandler() - { - UiBridge.Bridge.CloseModelessFormHandler += delegate(object sender, EventArgs args) - { - if (InvokeRequired) { Invoke(new EventHandler(OnForceClose), sender, args); } - else OnForceClose(sender, args); - }; - } - - private void OnForceClose(object sender, EventArgs args) - { - DialogResult = DialogResult.Cancel; - Close(); - } - - #endregion } } diff --git a/TestBenchFramework/Properties/AssemblyInfo.cs b/TestBenchFramework/Properties/AssemblyInfo.cs index de3754251..50fedbfb3 100644 --- a/TestBenchFramework/Properties/AssemblyInfo.cs +++ b/TestBenchFramework/Properties/AssemblyInfo.cs @@ -29,5 +29,5 @@ using System.Runtime.InteropServices; // Build Number // Revision // -[assembly: AssemblyVersion("2.14.612.1")] -[assembly: AssemblyFileVersion("2.14.612.1")] +[assembly: AssemblyVersion("2.14.613.1")] +[assembly: AssemblyFileVersion("2.14.613.1")]