UsrCodeExtractList.cs 7.6 KB
using Asa.FaceControl;
using BLL;
using Model;
using System;
using System.Windows.Forms;

namespace SmartScan
{
    public partial class UsrCodeExtractList : UserControl
    {
        private readonly bool changed;
        private readonly string codeText;
        private readonly string codeType;
        public event EventHandler DelClick;
        public event EventHandler AddClick;
        public event KeyChangedHandler KeyChanged;
        public delegate void KeyChangedHandler(object sender, string key);

        public UsrCodeExtractList(string codeText, string codeType, int codeLength, Model.MaterialCodeMatch match)
        {
            InitializeComponent();
            faceTextBox1.Tag = "not";

            changed = true;
            Language.SetLanguage(this);


            this.codeText = codeText;
            this.codeType = codeType;
            CboKeyword.Items.AddRange(BLLCommon.macroKey.ToArray());
            CboMatchingSplit.Items.AddRange(BLLCommon.CODE_SPLIT);
            NudStart.Maximum = codeLength;
            NudLength.Maximum = codeLength;

            ChkMatchingSplit.Checked = match.MatchSplit;
            CboMatchingSplit.Text = match.SplitText;
            NudSplitPart.Value = match.SplitPart;

            ChkMinLength.Checked = match.MatchMinLength;
            NudMinLength.Value = match.MinLength;
            ChkMaxLength.Checked = match.MatchMaxLength;
            NudMaxLength.Value = match.MaxLength;
            CboKeyword.Tag = "not";
            CboKeyword.SelectedText = match.Keyword;
            NudStart.Value = match.SubstringStart;
            match.CodeType = codeType;

            ChkMatchisnumber.Checked = match.MatchISNumber;

            if (match.SubstringLength == -1)
            {
                ChkLengthEnd.Checked = true;
                NudLength.Enabled = false;
            }
            else
                NudLength.Value = match.SubstringLength;

            changed = false;
            ShowPreview();
        }

        public FacePanel GetPanel()
        {
            return facePanel1;
        }

        public Model.MaterialCodeMatch GetMatch()
        {
            Model.MaterialCodeMatch match = new()
            {
                MatchSplit = ChkMatchingSplit.Checked,
                SplitText = CboMatchingSplit.Text,
                SplitPart = Convert.ToInt32(NudSplitPart.Value),
                MatchMinLength = ChkMinLength.Checked,
                MinLength = Convert.ToInt32(NudMinLength.Value),
                MatchMaxLength = ChkMaxLength.Checked,
                MaxLength = Convert.ToInt32(NudMaxLength.Value),
                Keyword = CboKeyword.SelectedText,
                SubstringStart = Convert.ToInt32(NudStart.Value),
                SubstringLength = ChkLengthEnd.Checked ? -1 : Convert.ToInt32(NudLength.Value),
                MatchISNumber = ChkMatchisnumber.Checked
            };
            return match;
        }

        public string GetMatchKey()
        {
            return CboKeyword.SelectedText;
        }




        public void ShowPreview(string txt = "")
        {
            if (changed) return;
            string text = codeText;

            //if (ChkMatchingMiddle.Checked) {
            //    int textcount=1;
            //    int.TryParse(NudMiddleTextCount.Text, out textcount);
            //    var t = ChoMatchMiddleType.SelectedIndex - 1;
            //    int index = 0;
            //    int count = 0;
            //    while ((index = text.IndexOf(TxtMatchingMiddleText.Text, index)) != -1 && !string.IsNullOrEmpty(TxtMatchingMiddleText.Text))
            //    {
            //        count++;
            //        index += TxtMatchingMiddleText.Text.Length;
            //    }

            //    if (t == -1 && count > textcount)
            //        text = ""; 
            //    if (t == 0 && count != textcount)
            //        text = ""; 
            //    if (t == 1 && count < textcount)
            //        text = "";
            //    faceTextBox1.Text = text;
            //    if (string.IsNullOrEmpty(text))
            //        return;
            //}
            try
            {
                if (ChkMatchingSplit.Checked)
                {
                    string str = Model.MaterialAsciiCode.GetAsciiCode(CboMatchingSplit.Text);
                    string[] arr = codeText.Split(new string[] { str }, StringSplitOptions.RemoveEmptyEntries);
                    int index = Convert.ToInt32(NudSplitPart.Value) - 1;
                    if (index < arr.Length)
                        text = arr[index];
                    else
                        text = "";
                }

                if (ChkMinLength.Checked)
                {
                    if (text.Length < NudMinLength.Value)
                        text = "";
                }

                if (ChkMaxLength.Checked)
                {
                    if (text.Length > NudMaxLength.Value)
                        text = "";
                }

                if (text.Length > 0)
                {
                    int startIndex = Convert.ToInt32(NudStart.Value);
                    int length = Convert.ToInt32(NudLength.Value);
                    if (ChkLengthEnd.Checked)
                    {
                        text = text.Substring(startIndex);
                    }
                    else
                    {
                        if (startIndex + length <= text.Length)
                            text = text.Substring(startIndex, length);
                        else
                            text = "";
                    }
                }

                faceTextBox1.Text = text;
            }catch(Exception ex)
            {
                faceTextBox1.Text = "";
                LogNet.log.Error("ShowPreview", ex);
            }
            
        }

        private void ChkLengthEnd_CheckedChanged(object sender, EventArgs e)
        {
            if (changed) return;
            NudLength.Enabled = !ChkLengthEnd.Checked;
            ShowPreview();
        }

        private void BtnDel_Click(object sender, EventArgs e)
        {
            DelClick?.Invoke(this, new EventArgs());
        }

        private void CboKeyword_SelectedIndexChanged(object sender, EventArgs e)
        {
            KeyChanged?.Invoke(this, CboKeyword.Text);
        }

        private void ChkMatchingSplit_CheckedChanged(object sender, EventArgs e)
        {
            ShowPreview();
        }

        private void NudSplitPart_ValueChanged(object sender, EventArgs e)
        {
            ShowPreview();
        }

        private void NudStart_ValueChanged(object sender, EventArgs e)
        {
            ShowPreview();
        }

        private void NudLength_ValueChanged(object sender, EventArgs e)
        {
            ShowPreview();
        }

        private void ChkMinLength_CheckedChanged(object sender, EventArgs e)
        {
            ShowPreview();
        }

        private void ChkMaxLength_CheckedChanged(object sender, EventArgs e)
        {
            ShowPreview();
        }

        private void NudMinLength_ValueChanged(object sender, EventArgs e)
        {
            ShowPreview();
        }

        private void NudMaxLength_ValueChanged(object sender, EventArgs e)
        {
            ShowPreview();
        }

        private void CboMatchingSplit_SelectedIndexChanged(object sender, EventArgs e)
        {
            ShowPreview();
        }

        private void CboMatchingSplit_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
                e.Handled = false;
        }

        private void BtnAdd_Click(object sender, EventArgs e)
        {
            AddClick?.Invoke(this, new EventArgs());
        }
    }
}