From 562fe6d0615eecf92a7e5c5edf9d316f8295b199 Mon Sep 17 00:00:00 2001
From: wells.liu <wells.liu@broconcentric.com>
Date: 星期五, 10 七月 2020 17:16:55 +0800
Subject: [PATCH] Merge branch 'master' of http://gitblit.broconcentric.com:8088/r/M071

---
 src/Bro.M071.Process/UI/M071_MainForm.cs |  105 ++++++++++++++++++++++++++++++++++++++++------------
 1 files changed, 81 insertions(+), 24 deletions(-)

diff --git a/src/Bro.M071.Process/UI/M071_MainForm.cs b/src/Bro.M071.Process/UI/M071_MainForm.cs
index 582a85a..17b79c9 100644
--- a/src/Bro.M071.Process/UI/M071_MainForm.cs
+++ b/src/Bro.M071.Process/UI/M071_MainForm.cs
@@ -32,6 +32,15 @@
             plImage.Controls.Add(cvImage);
 
             tscEditLocation.Visible = tsmiShowEditor.Checked = false;
+
+            this.Load += async (s, e) =>
+               {
+                   await Task.Delay(300);
+
+                   cvImage.SetScreenSize();
+                   cvImage.OnElementChangedHandle -= CvImage_OnElementChangedHandle;
+                   cvImage.OnElementChangedHandle += CvImage_OnElementChangedHandle;
+               };
         }
 
         public override void OnProcessUpdated()
@@ -44,34 +53,38 @@
             if (string.IsNullOrWhiteSpace(Config.BackgroundImagePath))
                 return;
 
-            try
+            this.Invoke(new Action(() =>
             {
-                Bitmap image = (Bitmap)Image.FromFile(Config.BackgroundImagePath);
-                cvImage.LoadImage(image);
-            }
-            catch (Exception ex)
-            {
-                LogAsync(new LogMsg(DateTime.Now, "杞藉叆鑳屾櫙鍥惧紓甯�", ex.Message));
-                return;
-            }
-
-            cvImage.Elements.Clear();
-            lvMeasures.Items.Clear();
-            Config.MeasurementUnitCollection.ForEach(u =>
-            {
-                if (!u.IsEnabled)
+                try
+                {
+                    Bitmap image = (Bitmap)Image.FromFile(Config.BackgroundImagePath);
+                    cvImage.LoadImage(image);
+                    cvImage.SetScreenSize();
+                }
+                catch (Exception ex)
+                {
+                    LogAsync(new LogMsg(DateTime.Now, "杞藉叆鑳屾櫙鍥惧紓甯�", ex.Message));
                     return;
+                }
 
-                var ele = new KeyIndicator(u.Id, u.DisplayLocation);
-                cvImage.Elements.Add(ele);
+                cvImage.Elements.Clear();
+                lvMeasures.Items.Clear();
 
-                ListViewItem item = new ListViewItem(u.GetDisplayText());
-                item.Tag = u.Id;
-                lvMeasures.Items.Add(item);
-            });
+                txtBarcode.Enabled = !Config.IsBarcodeManualInputBlocked;
 
-            if (txtBarcode.IsHandleCreated)
-                txtBarcode.BeginInvoke(new Action(() => txtBarcode.ReadOnly = Config.IsBarcodeManulInputBlocked));
+                Config.MeasurementUnitCollection.ForEach(u =>
+                {
+                    if (!u.IsEnabled)
+                        return;
+
+                    var ele = new KeyIndicator(u.Id, u.DisplayLocation);
+                    cvImage.Elements.Add(ele);
+
+                    ListViewItem item = new ListViewItem(u.GetDisplayText());
+                    item.Tag = u.Id;
+                    lvMeasures.Items.Add(item);
+                });
+            }));
 
             Process_M071.OnClearBarcode -= M071_MainForm_OnClearBarcode;
             Process_M071.OnClearBarcode += M071_MainForm_OnClearBarcode;
@@ -88,6 +101,14 @@
 
             Process_M071.OnFullResetDone -= Process_M071_FullResetDone;
             Process_M071.OnFullResetDone += Process_M071_FullResetDone;
+
+            Config.PropertyChanged -= Config_PropertyChanged;
+            Config.PropertyChanged += Config_PropertyChanged;
+        }
+
+        private void Config_PropertyChanged(object sender, PropertyChangedEventArgs e)
+        {
+            txtBarcode.Enabled = !Config.IsBarcodeManualInputBlocked;
         }
 
         #region 鍥剧墖鍖哄彸閿彍鍗�
@@ -109,10 +130,45 @@
         #endregion
 
         #region 鏍囩缂栬緫鍖�
+        private async void CvImage_OnElementChangedHandle(Common.Interface.IShapeElement ele)
+        {
+            this.Invoke(new Action(() =>
+            {
+                if (ele is KeyIndicator indicator)
+                {
+                    if (indicator.State == ElementState.Selected)
+                    {
+                        foreach (ListViewItem item in lvMeasures.Items)
+                        {
+                            if (item.Tag.ToString() == indicator.ID)
+                            {
+                                item.Selected = true;
+
+                                lvMeasures.EnsureVisible(item.Index);
+                                break;
+                            }
+                        }
+                    }
+                }
+            }));
+
+            await Task.Delay(100);
+        }
+
         private void lvMeasures_SelectedIndexChanged(object sender, EventArgs e)
         {
             if (lvMeasures.SelectedItems.Count <= 0)
                 return;
+
+            foreach (ListViewItem item in lvMeasures.Items)
+            {
+                item.BackColor = SystemColors.Control;
+            }
+
+            foreach (ListViewItem item in lvMeasures.SelectedItems)
+            {
+                item.BackColor = Color.Orange;
+            }
 
             var ele = cvImage.Elements.FirstOrDefault(u => u.ID == lvMeasures.SelectedItems[0].Tag.ToString());
             propGridKeyIndicator.SelectedObject = ele;
@@ -157,11 +213,12 @@
             if (lvMeasures.SelectedItems.Count <= 0)
                 return;
 
+            cvImage.Elements.ToList().ForEach(u => u.State = ElementState.Normal);
             var ele = cvImage.Elements.FirstOrDefault(u => u.ID == lvMeasures.SelectedItems[0].Tag.ToString());
             if (ele != null)
             {
                 ele.State = ElementState.Selected;
-                cvImage.Invalidate();
+                //cvImage.Invalidate();
             }
         }
         #endregion

--
Gitblit v1.8.0