UsrCodeExtractList.cs 8.6 KB
using Asa.FaceControl;
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 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";
            TxtMatchingEndText.Tag = "not";
            TxtMatchingMiddleText.Tag = "not";
            TxtMatchingStartText.Tag = "not";
            Language.SetLanguage(this);
            changed = true;

            ChoMatchMiddleType.Items.Add(Language.Dialog("MatchType_max"));
            ChoMatchMiddleType.Items.Add(Language.Dialog("MatchType_equals"));
            ChoMatchMiddleType.Items.Add(Language.Dialog("MatchType_min"));


            this.codeText = codeText;
            this.codeType = codeType;
            CboKeyword.Items.AddRange(Common.macroKey.ToArray());
            CboMatchingSplit.Items.AddRange(Common.CODE_SPLIT);
            NudStart.Maximum = codeLength;
            NudLength.Maximum = codeLength;
            ChkMatchingStart.Checked = match.MatchStart;
            TxtMatchingStartText.Text = match.StartText;
            ChkMatchingEnd.Checked = match.MatchEnd;
            TxtMatchingEndText.Text = match.EndText;
            ChkMatchingMiddle.Checked = match.MatchMiddle;
            TxtMatchingMiddleText.Text = match.MiddleText;
            NudMiddleTextCount.Value = match.MiddleTextCount;
            ChkMatchingSplit.Checked = match.MatchSplit;
            CboMatchingSplit.Text = match.SplitText;
            NudSplitPart.Value = match.SplitPart;
            ChkCaseSensitivity.Checked = match.CaseSensitive;
            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;
            ChoMatchMiddleType.SelectedIndex = match.MatchMiddleType+1;
            ChkMatchisnumber.Checked = match.MatchISNumber;

            ChkCheckCodeType.Checked = match.CheckCodeType;
            LblCodeType.Text = codeType;
            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()
            {
                MatchStart = ChkMatchingStart.Checked,
                StartText = TxtMatchingStartText.Text,
                MatchEnd = ChkMatchingEnd.Checked,
                EndText = TxtMatchingEndText.Text,
                MatchMiddle = ChkMatchingMiddle.Checked,
                MiddleText = TxtMatchingMiddleText.Text,
                MiddleTextCount = Convert.ToInt32(NudMiddleTextCount.Value),
                MatchSplit = ChkMatchingSplit.Checked,
                SplitText = CboMatchingSplit.Text,
                SplitPart = Convert.ToInt32(NudSplitPart.Value),
                CaseSensitive = ChkCaseSensitivity.Checked,
                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),
                CheckCodeType = ChkCheckCodeType.Checked,
                CodeType = LblCodeType.Text,
                MatchMiddleType = ChoMatchMiddleType.SelectedIndex - 1,
                MatchISNumber = ChkMatchisnumber.Checked
        };
            return match;
        }

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




        private void ShowPreview()
        {
            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;
            }

            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;





        }

        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;
        }
    }
}