UsrPrintTemplate.cs 12.2 KB
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
using Asa.FaceControl;
using Model;

namespace SmartScan
{
    public partial class UsrPrintTemplate : UserControl, ISetMenu
    {
        private List<PrintLabelTemplate> labelCopy;
        private int labelIndex = -1;
        private int fieldIndex = -1;
        private readonly BLL.PrintLabelShow labelShow;
        private int fieldAddTextUp = 0;
        private bool LabelOrField;
        private bool change = false;

        private readonly SizeF LABEL_ADD_DEFAULT = new(50, 60);
        private readonly RectangleF FIELD_ADD_DEFAULT = new(0, 0, 15, 10);
        
        public UsrPrintTemplate()
        {
            InitializeComponent();
            labelShow = new(pictureBox1);
            labelShow.LabelSizeShow += LabelShow_LabelSizeShow;
            labelShow.FieldSizeChanged += LabelShow_FieldSizeChanged;

            LstLabel.Items.AddRange(Common.labelEdit.Name);
            CboFieldType.Items.AddRange(Enum.GetNames(typeof(PrintLabelFieldType)));
            labelCopy = Common.labelEdit.ToCopy();
            Language.SetLanguage(this);
            LstLabel.SelectedFirst();
        }

        public FacePanel GetPanel()
        {
            return facePanel1;
        }

        public void Save()
        {
            Common.labelEdit.Save(ref labelCopy);
        }



        private void LabelShow_LabelSizeShow()
        {
            change = true;
            LabelOrField = true;
            NudFieldW.Value = labelCopy[labelIndex].Size.Width;
            NudFieldH.Value = labelCopy[labelIndex].Size.Height;
            NudFieldX.Value = 0;
            NudFieldY.Value = 0;
            NudFieldX.Enabled = false;
            NudFieldY.Enabled = false;
            CboFieldType.Enabled = false;
            BtnFieldFont.Enabled = false;
            BtnSetField.Enabled = false;
            LstField.SelectedIndex = -1;
            change = false;
        }

        private void LabelShow_FieldSizeChanged(int fieldIndex)
        {
            if (fieldIndex == -1) return;

            change = true;
            LabelOrField = false;
            NudFieldX.Enabled = true;
            NudFieldY.Enabled = true;
            CboFieldType.Enabled = true;
            BtnFieldFont.Enabled = true;
            BtnSetField.Enabled = true;

            NudFieldX.Value = labelCopy[labelIndex].Field[fieldIndex].Rectangle.X;
            NudFieldY.Value = labelCopy[labelIndex].Field[fieldIndex].Rectangle.Y;
            NudFieldW.Value = labelCopy[labelIndex].Field[fieldIndex].Rectangle.Width;
            NudFieldH.Value = labelCopy[labelIndex].Field[fieldIndex].Rectangle.Height;
            CboFieldType.SelectedText = labelCopy[labelIndex].Field[fieldIndex].Type.ToString();
            LstField.SelectedIndex = fieldIndex;
            labelCopy[labelIndex].State = TemplateState.Unsaved;
            if (labelCopy[labelIndex].Field[fieldIndex].Type != PrintLabelFieldType.Text)
            {
                SizeF sf = ObjConversion.MmToPx(labelCopy[labelIndex].Field[fieldIndex].Rectangle.Size);
                labelCopy[labelIndex].Field[fieldIndex].Image = BLL.ConvertBarcode.StrToCode(labelCopy[labelIndex].Field[fieldIndex].Type, labelCopy[labelIndex].Field[fieldIndex].Text, sf);
                labelShow.Refresh();
            }
            change = false;
        }

        private void LstLabel_SelectedIndexChanged(object sender, EventArgs e)
        {
            labelIndex = LstLabel.SelectedIndex;
            fieldIndex = -1;
            LstField.Items.Clear();

            if (labelIndex == -1)
            {
                labelShow.Load(null);
            }
            else
            {
                labelShow.Load(labelCopy[labelIndex]);
                string[] items = new string[labelCopy[labelIndex].Field.Count];
                for (int i = 0; i < items.Length; i++)
                    items[i] = labelCopy[labelIndex].Field[i].Text;
                LstField.Items.AddRange(items);
            }
        }

        private void BtnAddLabel_Click(object sender, EventArgs e)
        {
            string text = Language.Dialog(LanguageDialogKey.PRINT_TEMPLATE_ADD);
            FaceInputBox input = new(BtnAddLabel.Text, text);
            DialogResult dr = input.ShowDialog();
            if (dr != DialogResult.OK) return;
            if (string.IsNullOrWhiteSpace(input.InputValue)) return;
            //检查是否有已存在的名称
            var find = labelCopy.Find(s => s.Name.Equals(input.InputValue));
            if (find != null)
            {
                string hint = Asa.FaceControl.Language.Dialog("KeyExists");
                hint = hint.Replace("[name]", input.InputValue);
                new Asa.FaceControl.FaceMessageBox("", hint, MessageBoxButtons.OK).ShowDialog();
                return;
            }
            labelCopy.Add(new() { Name = input.InputValue, Size = LABEL_ADD_DEFAULT });
            labelCopy[labelCopy.Count - 1].State = TemplateState.Unsaved;

            LstLabel.Items.Add(input.InputValue);
            LstLabel.SelectedLast();
        }

        private void BtnDelLabel_Click(object sender, EventArgs e)
        {
            if (labelIndex == -1) return;
            string text = Language.Dialog(LanguageDialogKey.PRINT_TEMPLATE_DEL);
            text = text.Replace("[name]", LstLabel.Text);
            FaceMessageBox msg = new(BtnDelLabel.Text, text, MessageBoxButtons.YesNo);
            DialogResult dr = msg.ShowDialog();
            if (dr != DialogResult.Yes) return;

            labelCopy.RemoveAt(labelIndex);
            LstLabel.Items.RemoveAt(labelIndex);
            LstLabel.SelectedFirst();
        }

        private void BtnRenameLabel_Click(object sender, EventArgs e)
        {
            if (labelIndex == -1) return;
            string text = Language.Dialog(LanguageDialogKey.PRINT_TEMPLATE_RENAME);
            text = text.Replace("[name]", LstLabel.Text);
            FaceInputBox input = new(BtnRenameLabel.Text, text);
            DialogResult dr = input.ShowDialog();
            if (dr != DialogResult.OK) return;
            if (string.IsNullOrWhiteSpace(input.InputValue)) return;
            //检查是否有已存在的名称
            var find = labelCopy.Find(s => s.Name.Equals(input.InputValue));
            if (find != null)
            {
                string hint = Asa.FaceControl.Language.Dialog("KeyExists");
                hint = hint.Replace("[name]", input.InputValue);
                new Asa.FaceControl.FaceMessageBox("", hint, MessageBoxButtons.OK).ShowDialog();
                return;
            }
            labelCopy[labelIndex].Name = input.InputValue;
            labelCopy[labelIndex].State = TemplateState.Unsaved;
            LstLabel.Items[labelIndex] = input.InputValue;
        }

        private void BtnPrintTest_Click(object sender, EventArgs e)
        {
            if (labelIndex == -1) return;
            Common.labelEdit.PrintTest(labelCopy[labelIndex]);
        }

        private void BtnAddField_Click(object sender, EventArgs e)
        {
            if (labelIndex == -1) return;

            PrintLabelField field = new()
            {
                Type = PrintLabelFieldType.Text,
                Text = "Field" + ++fieldAddTextUp,
                Rectangle = FIELD_ADD_DEFAULT
            };

            labelCopy[labelIndex].Field.Add(field);
            fieldIndex = labelCopy[labelIndex].Field.Count - 1;
            LstField.Items.Add(field.Text);
            LstField.SelectedIndex = fieldIndex;
            labelCopy[labelIndex].State = TemplateState.Unsaved;
        }

        private void BtnDelField_Click(object sender, EventArgs e)
        {
            if (fieldIndex == -1) return;
            labelCopy[labelIndex].Field.RemoveAt(fieldIndex);
            LstField.Items.RemoveAt(fieldIndex);
            LstField.SelectedFirst();
            labelCopy[labelIndex].State = TemplateState.Unsaved;
        }

        private void BtnFieldFont_Click(object sender, EventArgs e)
        {
            if (fieldIndex == -1) return;
            if (labelCopy[labelIndex].Field[fieldIndex].Type != PrintLabelFieldType.Text) return;

            FontDialog dlg = new() { ShowEffects = false, Font = labelCopy[labelIndex].Field[fieldIndex].Font };
            if (dlg.ShowDialog() != DialogResult.OK) return;
            labelCopy[labelIndex].Field[fieldIndex].Font = dlg.Font;
            labelShow.Refresh();
            labelCopy[labelIndex].State = TemplateState.Unsaved;
        }

        private void BtnSetField_Click(object sender, EventArgs e)
        {
            if (fieldIndex == -1) return;

            FrmFieldContent frm = new(labelCopy[labelIndex].Field[fieldIndex].Text);
            DialogResult dr = frm.ShowDialog();
            if (dr != DialogResult.OK) return;

            labelCopy[labelIndex].Field[fieldIndex].Text = frm.Content;
            LstField.Items[LstField.SelectedIndex] = frm.Content;
            labelShow.Refresh();
            labelCopy[labelIndex].State = TemplateState.Unsaved;
        }

        private void CboFieldType_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (change) return;
            if (fieldIndex == -1) return;
            PrintLabelField field = labelCopy[labelIndex].Field[fieldIndex];

            field.Type = (PrintLabelFieldType)CboFieldType.SelectedIndex;
            if (field.Type == PrintLabelFieldType.Text)
                field.Image = null;
            else
            {
                SizeF sf = ObjConversion.MmToPx(field.Rectangle.Size);
                field.Image = BLL.ConvertBarcode.StrToCode(field.Type, field.Text, sf);
            }
            labelShow.Refresh();
            labelCopy[labelIndex].State = TemplateState.Unsaved;
        }

        private void ChkFieldShowKey_CheckedChanged(object sender, EventArgs e)
        {
            if (labelIndex == -1) return;
            labelCopy[labelIndex].FieldShowKey = ChkFieldShowKey.Checked;
            labelShow.Refresh();
        }

        private void NudFieldXYWH_ValueChanged(object sender, EventArgs e)
        {
            if (change) return;
            float x = NudFieldX.Value;
            float y = NudFieldY.Value;
            float w = NudFieldW.Value;
            float h = NudFieldH.Value;

            if (LabelOrField)
            {
                if (labelIndex == -1) return;
                labelCopy[labelIndex].Size = new(w, h);
                labelShow.Refresh();
                labelCopy[labelIndex].State = TemplateState.Unsaved;
            }
            else
            {
                if (fieldIndex == -1) return;
                labelCopy[labelIndex].Field[fieldIndex].Rectangle = new(x, y, w, h);
                labelShow.Refresh();
                labelCopy[labelIndex].State = TemplateState.Unsaved;
            }
        
        }

        private void LstField_SelectedIndexChanged(object sender, EventArgs e)
        {
            fieldIndex = LstField.SelectedIndex;

            if (change) return;
            labelShow.FieldSelected(fieldIndex);
        }

        private void BtnCopyLabel_Click(object sender, EventArgs e)
        {
            if (labelIndex == -1) return;
            string text = Language.Dialog(LanguageDialogKey.PRINT_TEMPLATE_ADD);
            FaceInputBox input = new(BtnCopyLabel.Text, text, LstLabel.Text);
            DialogResult dr = input.ShowDialog();
            if (dr != DialogResult.OK) return;
            if (string.IsNullOrWhiteSpace(input.InputValue)) return;
            //检查是否有已存在的名称
            var find = labelCopy.Find(s => s.Name.Equals(input.InputValue));
            if (find != null)
            {
                string hint = Asa.FaceControl.Language.Dialog("KeyExists");
                hint = hint.Replace("[name]", input.InputValue);
                new Asa.FaceControl.FaceMessageBox("", hint, MessageBoxButtons.OK).ShowDialog();
                return;
            }
            PrintLabelTemplate temp = labelCopy[labelIndex].Clone();
            temp.Name = input.InputValue;
            temp.FilePath = "";
            temp.State = TemplateState.Unsaved;

            labelCopy.Add(temp);
            labelCopy[labelCopy.Count - 1].State = TemplateState.Unsaved;

            LstLabel.Items.Add(input.InputValue);
            LstLabel.SelectedLast();
        }
    }
}