using System;
using System.Linq;
using System.Collections.ObjectModel;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Threading;
using System.Windows.Forms;

using SmartX;
using ITC81DB_2H.Controls;
using ITC81DB_2H.DialogForms;
using ITC81DB_2H_ImageDll;
using ITC81DB_2H.Datastore;
using ITC81DB_2H.Part11_UserManager;

namespace ITC81DB_2H.Forms
{
    public partial class FormMainDisplay : Form
    {
        #region Field
        public string ChangeID;

        private FormMain m_ParentForm;

        public bool IsCurrentValueDouble;
        private Define.E_MainDisplayStore CurrentDisplay;

        public ControlMainDisplayAlarm MainAlarm;
        public ControlMainDisplayWeightBigScreen MainWeightBigScreen;
        public ControlMainDisplayWeightSmall MainWeightSmall;
        public ControlMainDisplayStopDataStatistics MainDataStatistics;
        public ControlMainDisplayStart MainBarGraph;
        public ControlMainDisplayStartGraph MainLineGraph;
        public ControlMainDisplayStartList MainList;
        public ControlMainDisplayMenu MainSubMenu;
        public ControlMainDisplayFeedback MainFeedback;
        public ControlMainDisplayModbus MainModbus;
        #endregion

        #region Constructor
        public FormMainDisplay(FormMain parent)
        {
            InitializeComponent();

            this.ParentForm = parent;

            this.InitializeDesign();
            this.InitializeControl();
            this.DefaultSetting();
        }
        #endregion

        #region Property
        public FormMain ParentForm
        {
            get { return this.m_ParentForm; }
            private set { this.m_ParentForm = value; }
        } 
        #endregion

        #region Method
        public void InitializeDesign()
        {
            Class1 images = new Class1();

            if (this.ParentForm.SystemConfig1.Language == Define.E_LanguageID.English)
            {
                this.buttonZero.DisableImage = new Bitmap(images.GetImage(Class1.ButtonImages.engFormMainDisplayZeroDisable));
                this.buttonZero.DownImage = new Bitmap(images.GetImage(Class1.ButtonImages.engFormMainDisplayZeroDown));
                this.buttonZero.UpImage = new Bitmap(images.GetImage(Class1.ButtonImages.engFormMainDisplayZeroUp));
                this.buttonPrint.DisableImage = new Bitmap(images.GetImage(Class1.ButtonImages.engFormMainDisplayPrintDisable));
                this.buttonPrint.DownImage = new Bitmap(images.GetImage(Class1.ButtonImages.engFormMainDisplayPrintDown));
                this.buttonPrint.UpImage = new Bitmap(images.GetImage(Class1.ButtonImages.engFormMainDisplayPrintUp));
                this.buttonWeightInputMode.DownImage = new Bitmap(images.GetImage(Class1.ButtonImages.engFormMainDisplayDeviationUp));
                this.buttonWeightInputMode.UpImage = new Bitmap(images.GetImage(Class1.ButtonImages.engFormMainDisplayWeightUp));
                this.buttonClear.DisableImage = new Bitmap(images.GetImage(Class1.ButtonImages.engFormMainDisplayClearDisable));
                this.buttonClear.DownImage = new Bitmap(images.GetImage(Class1.ButtonImages.engFormMainDisplayClearDown));
                this.buttonClear.UpImage = new Bitmap(images.GetImage(Class1.ButtonImages.engFormMainDisplayClearUp));
                this.buttonUser.DisableImage = new Bitmap(images.GetImage(Class1.ButtonImages.engFormMainDisplayLoginDisable));
                this.buttonUser.DownImage = new Bitmap(images.GetImage(Class1.ButtonImages.engFormMainDisplayLogOutDown));
                this.buttonUser.UpImage = new Bitmap(images.GetImage(Class1.ButtonImages.engFormMainDisplayLoginUp));
            }
            else if (this.ParentForm.SystemConfig1.Language == Define.E_LanguageID.Chinese)
            {
                this.buttonZero.DisableImage = new Bitmap(images.GetImage(Class1.ButtonImages.chnMainZeroDisable));
                this.buttonZero.DownImage = new Bitmap(images.GetImage(Class1.ButtonImages.chnMainZeroDown));
                this.buttonZero.UpImage = new Bitmap(images.GetImage(Class1.ButtonImages.chnMainZeroUp));
                this.buttonPrint.DisableImage = new Bitmap(images.GetImage(Class1.ButtonImages.chnMainPrintDisable));
                this.buttonPrint.DownImage = new Bitmap(images.GetImage(Class1.ButtonImages.chnMainPrintDown));
                this.buttonPrint.UpImage = new Bitmap(images.GetImage(Class1.ButtonImages.chnMainPrintUp));
                this.buttonWeightInputMode.DownImage = new Bitmap(images.GetImage(Class1.ButtonImages.chnMainDeviationUp));
                this.buttonWeightInputMode.UpImage = new Bitmap(images.GetImage(Class1.ButtonImages.chnMainWeightUp));
                this.buttonClear.DisableImage = new Bitmap(images.GetImage(Class1.ButtonImages.chnMainClearDisable));
                this.buttonClear.DownImage = new Bitmap(images.GetImage(Class1.ButtonImages.chnMainClearDown));
                this.buttonClear.UpImage = new Bitmap(images.GetImage(Class1.ButtonImages.chnMainClearUp));
                this.buttonUser.DisableImage = new Bitmap(images.GetImage(Class1.ButtonImages.chnMainLoginDisable));
                this.buttonUser.DownImage = new Bitmap(images.GetImage(Class1.ButtonImages.chnMainLogOutDown));
                this.buttonUser.UpImage = new Bitmap(images.GetImage(Class1.ButtonImages.chnMainLoginUp));
            }
            else if (this.ParentForm.SystemConfig1.Language == Define.E_LanguageID.Czech)
            {
            }
            else if (this.ParentForm.SystemConfig1.Language == Define.E_LanguageID.Russian)
            {
                this.buttonZero.DisableImage = new Bitmap(images.GetImage(Class1.ButtonImages.rusFormMainDisplayZeroDisable));
                this.buttonZero.DownImage = new Bitmap(images.GetImage(Class1.ButtonImages.rusFormMainDisplayZeroDown));
                this.buttonZero.UpImage = new Bitmap(images.GetImage(Class1.ButtonImages.rusFormMainDisplayZeroUp));
                this.buttonPrint.DisableImage = new Bitmap(images.GetImage(Class1.ButtonImages.rusFormMainDisplayPrintDisable));
                this.buttonPrint.DownImage = new Bitmap(images.GetImage(Class1.ButtonImages.rusFormMainDisplayPrintDown));
                this.buttonPrint.UpImage = new Bitmap(images.GetImage(Class1.ButtonImages.rusFormMainDisplayPrintUp));
                this.buttonWeightInputMode.DownImage = new Bitmap(images.GetImage(Class1.ButtonImages.rusFormMainDisplayDeviationUp));
                this.buttonWeightInputMode.UpImage = new Bitmap(images.GetImage(Class1.ButtonImages.rusFormMainDisplayWeightUp));
                this.buttonClear.DisableImage = new Bitmap(images.GetImage(Class1.ButtonImages.rusFormMainDisplayClearDisable));
                this.buttonClear.DownImage = new Bitmap(images.GetImage(Class1.ButtonImages.rusFormMainDisplayClearDown));
                this.buttonClear.UpImage = new Bitmap(images.GetImage(Class1.ButtonImages.rusFormMainDisplayClearUp));
                this.buttonUser.DisableImage = new Bitmap(images.GetImage(Class1.ButtonImages.rusFormMainDisplayLoginDisable));
                this.buttonUser.DownImage = new Bitmap(images.GetImage(Class1.ButtonImages.rusFormMainDisplayLogOutDown));
                this.buttonUser.UpImage = new Bitmap(images.GetImage(Class1.ButtonImages.rusFormMainDisplayLoginUp));
            }
            else if (this.ParentForm.SystemConfig1.Language == Define.E_LanguageID.German)
            {
                this.buttonZero.DisableImage = new Bitmap(images.GetImage(Class1.ButtonImages.gerFormMainDisplayZeroDisable));
                this.buttonZero.DownImage = new Bitmap(images.GetImage(Class1.ButtonImages.gerFormMainDisplayZeroDown));
                this.buttonZero.UpImage = new Bitmap(images.GetImage(Class1.ButtonImages.gerFormMainDisplayZeroUp));
                this.buttonPrint.DisableImage = new Bitmap(images.GetImage(Class1.ButtonImages.gerFormMainDisplayPrintDisable));
                this.buttonPrint.DownImage = new Bitmap(images.GetImage(Class1.ButtonImages.gerFormMainDisplayPrintDown));
                this.buttonPrint.UpImage = new Bitmap(images.GetImage(Class1.ButtonImages.gerFormMainDisplayPrintUp));
                this.buttonWeightInputMode.DownImage = new Bitmap(images.GetImage(Class1.ButtonImages.gerFormMainDisplayDeviationUp));
                this.buttonWeightInputMode.UpImage = new Bitmap(images.GetImage(Class1.ButtonImages.gerFormMainDisplayWeightUp));
                this.buttonClear.DisableImage = new Bitmap(images.GetImage(Class1.ButtonImages.gerFormMainDisplayClearDisable));
                this.buttonClear.DownImage = new Bitmap(images.GetImage(Class1.ButtonImages.gerFormMainDisplayClearDown));
                this.buttonClear.UpImage = new Bitmap(images.GetImage(Class1.ButtonImages.gerFormMainDisplayClearUp));
                this.buttonUser.DisableImage = new Bitmap(images.GetImage(Class1.ButtonImages.gerFormMainDisplayLoginDisable));
                this.buttonUser.DownImage = new Bitmap(images.GetImage(Class1.ButtonImages.gerFormMainDisplayLogOutDown));
                this.buttonUser.UpImage = new Bitmap(images.GetImage(Class1.ButtonImages.gerFormMainDisplayLoginUp));
            }
            else if (this.ParentForm.SystemConfig1.Language == Define.E_LanguageID.Spanish)
            {

            }
            else
            {
                this.buttonZero.DisableImage = new Bitmap(images.GetImage(Class1.ButtonImages.korFormMainDisplayZeroDisable));
                this.buttonZero.DownImage = new Bitmap(images.GetImage(Class1.ButtonImages.korFormMainDisplayZeroDown));
                this.buttonZero.UpImage = new Bitmap(images.GetImage(Class1.ButtonImages.korFormMainDisplayZeroUp));
                this.buttonPrint.DisableImage = new Bitmap(images.GetImage(Class1.ButtonImages.korFormMainDisplayPrintDisable));
                this.buttonPrint.DownImage = new Bitmap(images.GetImage(Class1.ButtonImages.korFormMainDisplayPrintDown));
                this.buttonPrint.UpImage = new Bitmap(images.GetImage(Class1.ButtonImages.korFormMainDisplayPrintUp));
                this.buttonWeightInputMode.DownImage = new Bitmap(images.GetImage(Class1.ButtonImages.korFormMainDisplayDeviationUp));
                this.buttonWeightInputMode.UpImage = new Bitmap(images.GetImage(Class1.ButtonImages.korFormMainDisplayWeightUp));
                this.buttonClear.DisableImage = new Bitmap(images.GetImage(Class1.ButtonImages.korFormMainDisplayClearDisable));
                this.buttonClear.DownImage = new Bitmap(images.GetImage(Class1.ButtonImages.korFormMainDisplayClearDown));
                this.buttonClear.UpImage = new Bitmap(images.GetImage(Class1.ButtonImages.korFormMainDisplayClearUp));
                this.buttonUser.DisableImage = new Bitmap(images.GetImage(Class1.ButtonImages.engFormMainDisplayLoginDisable));
                this.buttonUser.DownImage = new Bitmap(images.GetImage(Class1.ButtonImages.engFormMainDisplayLogOutDown));
                this.buttonUser.UpImage = new Bitmap(images.GetImage(Class1.ButtonImages.engFormMainDisplayLoginUp));
            }

            if (this.ParentForm.CurrentSystemStatus.CurrentWeightInputMode == Define.E_WeightInputMode.Deviation)
                this.buttonWeightInputMode.ButtonDown();
            else
                this.buttonWeightInputMode.ButtonUp();
        }
        private void InitializeControl()
        {
            this.IsCurrentValueDouble = false;

            this.MainWeightBigScreen = new ControlMainDisplayWeightBigScreen(this);
            this.MainWeightSmall = new ControlMainDisplayWeightSmall(this);
            this.MainDataStatistics = new ControlMainDisplayStopDataStatistics(this);
            this.MainBarGraph = new ControlMainDisplayStart(this);
            this.MainLineGraph = new ControlMainDisplayStartGraph(this);
            this.MainList = new ControlMainDisplayStartList(this);
            this.MainSubMenu = new ControlMainDisplayMenu(this);
            this.MainAlarm = new ControlMainDisplayAlarm();
            this.MainFeedback = new ControlMainDisplayFeedback(this);
            this.MainModbus = new ControlMainDisplayModbus(this);

            this.MainWeightBigScreen.Location = new Point(0, 65);
            this.MainWeightSmall.Location = new Point(0, 65);
            this.MainDataStatistics.Location = new Point(0, 313);
            this.MainBarGraph.Location = new Point(0, 313);
            this.MainLineGraph.Location = new Point(0, 313);
            this.MainList.Location = new Point(0, 213);
            this.MainSubMenu.Location = new Point(0, 213);
            this.MainAlarm.Location = new Point(390, 60);
            this.MainFeedback.Location = new Point(0, 313);
            this.MainModbus.Location = new Point(0, 213);

            this.Controls.Add(this.MainWeightBigScreen);
            this.Controls.Add(this.MainWeightSmall);
            this.Controls.Add(this.MainDataStatistics);
            this.Controls.Add(this.MainBarGraph);
            this.Controls.Add(this.MainLineGraph);
            this.Controls.Add(this.MainList);
            this.Controls.Add(this.MainSubMenu);
            this.Controls.Add(this.MainAlarm);
            this.Controls.Add(this.MainFeedback);
            this.Controls.Add(this.MainModbus);
        }
        private void DefaultSetting()
        {
            if (this.ParentForm.IsBootingComplete == false)
                this.buttonProductNo.Text = "**";
            else
                this.buttonProductNo.Text = this.ParentForm.SystemConfig1.ProductNumber.ToString();

            this.pictureBoxStop.Visible = true;
            this.pictureBoxStart.Visible = false;
            
            // 알람 표시
            this.pictureBoxIconAlarm.Visible = false;
            this.MainAlarm.Visible = false;
            this.MainAlarm.BringToFront();

            this.buttonPrint.Visible = this.ParentForm.SystemConfig1.IsPrinterEnable;
            if (this.ParentForm.SystemConfig1.IsPrintPerProductEnable == true)
                this.buttonPrint.ButtonDown();
            else
                this.buttonPrint.ButtonUp();

            if (int.Parse(this.ParentForm.CurrentSystemParameter1.EquipmentType) == 4)
                this.buttonConveyorUpDown.Visible = true;
            else
                this.buttonConveyorUpDown.Visible = false;

            if (this.ParentForm.SystemConfig1.IsLogin == false)
                this.ParentForm.CurrentSystemStatus.CurrentUser.Group = Define.E_UserGroup.NotLogin;
            else
            {
                this.ParentForm.CurrentSystemStatus.CurrentUser.Group = Define.E_UserGroup.LogOut;

                this.LoginVisible(true);
            }

            this.UpdateDisplayUser(this.ParentForm.CurrentSystemStatus);

            this.CurrentDisplay = Define.E_MainDisplayStore.BarGraph;
            this.DisplayBottomMain(this.CurrentDisplay);
        }
        public void LoginVisible(bool bValue)
        {
            this.buttonUser.Visible = bValue;
            this.labelUserID.Visible = bValue;
            this.labelUserLevel.Visible = bValue;
        }
        
        public void DisplayHiddenMenu(bool visible)
        {
            if (visible == false)
            {
                if (this.ParentForm.SystemConfig2.Barcode != 0)
                    this.labelBarcode.Visible = false;
                //this.labelComRetry.Visible = false;
                //this.labelComRetry3th.Visible = false;
                this.labelOverrun.Visible = false;
                this.labelBufferCNT.Visible = false;
                this.labelMissingCount.Visible = false;

                //this.labelBARCD.Visible = false;
            }
            else
            {
                if (this.ParentForm.SystemConfig2.Barcode != 0)
                {
                    this.labelBarcode.Text = "";
                    this.labelBarcode.Visible = true;
                }
                //this.labelComRetry.Visible = true;
                //this.labelComRetry3th.Visible = true;
                this.labelOverrun.Visible = true;
                this.labelBufferCNT.Visible = true;
                this.labelMissingCount.Visible = true;

                //this.labelBARCD.Text = "";
                //this.labelBARCD.Visible = true;
            }
        }

        public void BottomButtonLocation(int buttonNo, SmartX.SmartButton button)
        {
            switch (buttonNo)
            {
                case 1:
                    button.Location = new Point(385, 0);
                    break;
                case 2:
                    button.Location = new Point(456, 0);
                    break;
                case 3:
                    button.Location = new Point(527, 0);
                    break;
                default:
                    break;
            }
        }

        public void AlarmOccurs(int errorNum, string alarmRawData)
        {
            string errorName = "";

            switch (errorNum)
            {
                case 1:
                    #region a1_진입센서 에러
                    switch (this.ParentForm.SystemConfig1.Language)
                    {
                        case Define.E_LanguageID.Korean:
                            errorName = "a1_진입센서 에러";
                            break;
                        case Define.E_LanguageID.German:
                            errorName = "a1_Fehler Eingangssensor";
                            break;
                        case Define.E_LanguageID.Chinese:
                            errorName = "a1_入口传感器错误";
                            break;
                        case Define.E_LanguageID.Russian:
                            errorName = "a1_Ошибка датчика входа";
                            break;
                        case Define.E_LanguageID.Spanish:
                            errorName = "a1_Error en el sensor de entrada";
                            break;
                        case Define.E_LanguageID.Turkish:
                            errorName = "a1_Giriş Sensörü Hatası";
                            break;
                        case Define.E_LanguageID.French:
                            errorName = "a1_Erreur du capteur d'entrée";
                            break;
                        case Define.E_LanguageID.Czech:
                            break;
                        default:
                            errorName = "a1_Entry Sensor Error";
                            break;
                    }
                    #endregion
                    break;
                case 2:
                    #region a2_로드셀 에러
                    switch (this.ParentForm.SystemConfig1.Language)
                    {
                        case Define.E_LanguageID.Korean:
                            errorName = "a2_로드셀 에러";
                            break;
                        case Define.E_LanguageID.German:
                            errorName = "a2_Fehler Wägezelle";
                            break;
                        case Define.E_LanguageID.Chinese:
                            errorName = "a2_称重传感器错误";
                            break;
                        case Define.E_LanguageID.Russian:
                            errorName = "a2_Ошибка тензодатчика";
                            break;
                        case Define.E_LanguageID.Spanish:
                            errorName = "a2_Error en la celda de carga";
                            break;
                        case Define.E_LanguageID.Turkish:
                            errorName = "a2_Yük Hücresi Hatası";
                            break;
                        case Define.E_LanguageID.French:
                            errorName = "a2_Erreur de cellule de charge";
                            break;
                        case Define.E_LanguageID.Czech:
                            break;
                        default:
                            errorName = "a2_LoadCell Error";
                            break;
                    }
                    #endregion
                    break;
                case 3:
                    #region a3_공압 낮음
                    switch (this.ParentForm.SystemConfig1.Language)
                    {
                        case Define.E_LanguageID.Korean:
                            errorName = "a3_공압 낮음";
                            break;
                        case Define.E_LanguageID.German:
                            errorName = "a3_Niedriger Druck";
                            break;
                        case Define.E_LanguageID.Chinese:
                            errorName = "a3_低压";
                            break;
                        case Define.E_LanguageID.Russian:
                            errorName = "a3_Низкое давление воздуха";
                            break;
                        case Define.E_LanguageID.Spanish:
                            errorName = "a3_Baja presión";
                            break;
                        case Define.E_LanguageID.Turkish:
                            errorName = "a3_Düşük Basınç";
                            break;
                        case Define.E_LanguageID.French:
                            errorName = "a3_Basse pression";
                            break;
                        case Define.E_LanguageID.Czech:
                            break;
                        default:
                            errorName = "a3_Low Pressure";
                            break;
                    }
                    #endregion
                    break;
                case 4:
                    #region a4_문 열림 감지
                    switch (this.ParentForm.SystemConfig1.Language)
                    {
                        case Define.E_LanguageID.Korean:
                            errorName = "a4_문 열림 감지";
                            break;
                        case Define.E_LanguageID.German:
                            errorName = "a4_Türverriegelung";
                            break;
                        case Define.E_LanguageID.Chinese:
                            errorName = "a4_门联锁";
                            break;
                        case Define.E_LanguageID.Russian:
                            errorName = "a4_Обнаружение открытой двери";
                            break;
                        case Define.E_LanguageID.Spanish:
                            errorName = "a4_Enclavamiento de la puerta";
                            break;
                        case Define.E_LanguageID.Turkish:
                            errorName = "a4_Kapı Kilidi";
                            break;
                        case Define.E_LanguageID.French:
                            errorName = "a4_Interverrouillage de porte";
                            break;
                        case Define.E_LanguageID.Czech:
                            break;
                        default:
                            errorName = "a4_Door Interlock";
                            break;
                    }
                    #endregion
                    break;
                case 6:
                    #region a6_적체 에러
                    switch (this.ParentForm.SystemConfig1.Language)
                    {
                        case Define.E_LanguageID.Korean:
                            errorName = "a6_적체 에러";
                            break;
                        case Define.E_LanguageID.German:
                            errorName = "a6_Stapelfehler";
                            break;
                        case Define.E_LanguageID.Chinese:
                            errorName = "a6_堆叠错误";
                            break;
                        case Define.E_LanguageID.Russian:
                            errorName = "a6_Ошибка штабеля";
                            break;
                        case Define.E_LanguageID.Spanish:
                            errorName = "a6_Error de apilamiento";
                            break;
                        case Define.E_LanguageID.Turkish:
                            errorName = "a6_Yığma Hatası";
                            break;
                        case Define.E_LanguageID.French:
                            errorName = "a6_Erreur d'empilage";
                            break;
                        case Define.E_LanguageID.Czech:
                            break;
                        default:
                            errorName = "a6_Stack up Error";
                            break;
                    }
                    #endregion
                    break;
                case 7:
                    #region a7_선별부A 에러
                    switch (this.ParentForm.SystemConfig1.Language)
                    {
                        case Define.E_LanguageID.Korean:
                            errorName = "a7_선별부A 에러";
                            break;
                        case Define.E_LanguageID.German:
                            errorName = "a7_Fehler Sortierer A";
                            break;
                        case Define.E_LanguageID.Chinese:
                            errorName = "a7_分拣机 A 错误";
                            break;
                        case Define.E_LanguageID.Russian:
                            errorName = "a7_Ошибка сортировочного блока A";
                            break;
                        case Define.E_LanguageID.Spanish:
                            errorName = "a7_Error en el clasificador A";
                            break;
                        case Define.E_LanguageID.Turkish:
                            errorName = "a7_Sıralayıcı A Hatası";
                            break;
                        case Define.E_LanguageID.French:
                            errorName = "a7_Erreur du trieur A";
                            break;
                        case Define.E_LanguageID.Czech:
                            break;
                        default:
                            errorName = "a7_Sorter A Error";
                            break;
                    }
                    #endregion
                    break;
                case 8:
                    #region a8_비상정지
                    switch (this.ParentForm.SystemConfig1.Language)
                    {
                        case Define.E_LanguageID.Korean:
                            errorName = "a8_비상정지";
                            break;
                        case Define.E_LanguageID.German:
                            errorName = "a8_Not-Aus";
                            break;
                        case Define.E_LanguageID.Chinese:
                            errorName = "a8_紧急停止";
                            break;
                        case Define.E_LanguageID.Russian:
                            errorName = "a8_Аварийная остановка";
                            break;
                        case Define.E_LanguageID.Spanish:
                            errorName = "a8_Parada de emergencia";
                            break;
                        case Define.E_LanguageID.Turkish:
                            errorName = "a8_Acil Durdurma";
                            break;
                        case Define.E_LanguageID.French:
                            errorName = "a8_Arrêt d'urgence";
                            break;
                        case Define.E_LanguageID.Czech:
                            break;
                        default:
                            errorName = "a8_Emergency Stop";
                            break;
                    }
                    #endregion
                    break;
                case 9:
                    #region a9_인버터 에러
                    switch (this.ParentForm.SystemConfig1.Language)
                    {
                        case Define.E_LanguageID.Korean:
                            errorName = "a9_인버터 에러";
                            break;
                        case Define.E_LanguageID.German:
                            errorName = "a9_Wechselrichterfehler";
                            break;
                        case Define.E_LanguageID.Chinese:
                            errorName = "a9_逆变器错误";
                            break;
                        case Define.E_LanguageID.Russian:
                            errorName = "a9_Ошибка инвертора";
                            break;
                        case Define.E_LanguageID.Spanish:
                            errorName = "a9_Error del inversor";
                            break;
                        case Define.E_LanguageID.Turkish:
                            errorName = "a9_İnverter Hatası";
                            break;
                        case Define.E_LanguageID.French:
                            errorName = "a9_Erreur de l'onduleur";
                            break;
                        case Define.E_LanguageID.Czech:
                            break;
                        default:
                            errorName = "a9_Inverter Error";
                            break;
                    }
                    #endregion
                    break;
                case 13:
                    #region a13_방풍커버 열림
                    switch (this.ParentForm.SystemConfig1.Language)
                    {
                        case Define.E_LanguageID.Korean:
                            errorName = "a13_방풍커버 열림";
                            break;
                        case Define.E_LanguageID.German:
                            errorName = "a13_Windschutzscheibenabdeckung offen";
                            break;
                        case Define.E_LanguageID.Chinese:
                            errorName = "a13_挡风玻璃盖打开";
                            break;
                        case Define.E_LanguageID.Russian:
                            errorName = "a13_Открыта крышка ветрового стекла";
                            break;
                        case Define.E_LanguageID.Spanish:
                            errorName = "a13_Cubierta del parabrisas abierta";
                            break;
                        case Define.E_LanguageID.Turkish:
                            errorName = "a13_Rüzgar Geçirmez Açık";
                            break;
                        case Define.E_LanguageID.French:
                            errorName = "a13_Couvercle de pare-brise ouvert";
                            break;
                        case Define.E_LanguageID.Czech:
                            errorName = "";
                            break;
                        default:
                            errorName = "a13_Windshield cover open";
                            break;
                    }
                    #endregion
                    break;
                case 14:
                    #region a14_선별부B 에러
                    switch (this.ParentForm.SystemConfig1.Language)
                    {
                        case Define.E_LanguageID.Korean:
                            errorName = "a14_선별부B 에러";
                            break;
                        case Define.E_LanguageID.German:
                            errorName = "a14_Fehler Sortierer B";
                            break;
                        case Define.E_LanguageID.Chinese:
                            errorName = "a14_分拣机 B 错误";
                            break;
                        case Define.E_LanguageID.Russian:
                            errorName = "a14_Ошибка сортировочного блока B";
                            break;
                        case Define.E_LanguageID.Spanish:
                            errorName = "a14_Error en el clasificador B";
                            break;
                        case Define.E_LanguageID.Turkish:
                            errorName = "a14_Sıralayıcı B Hatası";
                            break;
                        case Define.E_LanguageID.French:
                            errorName = "a14_Erreur du trieur B";
                            break;
                        case Define.E_LanguageID.Czech:
                            break;
                        default:
                            errorName = "a14_Sorter B Error";
                            break;
                    }
                    #endregion
                    break;
                case 18:
                    #region a18_제품진입 미감지
                    switch (this.ParentForm.SystemConfig1.Language)
                    {
                        case Define.E_LanguageID.Korean:
                            errorName = "a18_제품진입 미감지";
                            break;
                        case Define.E_LanguageID.German:
                            errorName = "a18_Produkteingang nicht erkannt";
                            break;
                        case Define.E_LanguageID.Chinese:
                            errorName = "a18_产品入口未检测到";
                            break;
                        case Define.E_LanguageID.Russian:
                            errorName = "a14_Ошибка сортировочного блока B";
                            break;
                        case Define.E_LanguageID.Spanish:
                            errorName = "a18_Entrada de producto no detectada";
                            break;
                        case Define.E_LanguageID.Turkish:
                            errorName = "a18_Ürün girişi algılanmadı";
                            break;
                        case Define.E_LanguageID.French:
                            errorName = "a18_Entrée de produit non détectée";
                            break;
                        case Define.E_LanguageID.Czech:
                            break;
                        default:
                            errorName = "a18_Product entry undetected";
                            break;
                    }
                    #endregion
                    break;
                default:
                    break;
            }

            this.PopUpWarning(errorName);
            this.MainAlarm.listBoxMessage.Items.Add(errorName);
        }
        public void UpdateDisplayAlarmView(AlarmList alarm, string alarmData)
        {
            if (alarm.IsLoadCellError == true || alarm.IsInverterError == true || alarm.IsEmergencyStop == true || alarm.IsDoorInterlock == true
                || alarm.IsPressureSensingError == true || alarm.IsStackUpSensorError == true
                || alarm.IsEntrySensorError == true || alarm.IsEntryNotDetected == true)
            {
                if (this.pictureBoxIconAlarm.Visible == false)
                    this.pictureBoxIconAlarm.Visible = true;

                if (alarm.IsEntryNotDetected == true)
                    this.ParentForm.TransferData(CommunicationCommand.Stop, CommunicationID.MainBoard);
                //if (alarm.IsStackUpSensorError == true)
                //{
                //    if (int.Parse(this.ParentForm.CurrentSystemParameter1.OptionBoard) != 2) // 디스펜서 사용 시, 컨베어 미정지
                //    {
                //        this.ParentForm.TransferData(CommunicationCommand.Stop, CommunicationID.MainBoard);
                //        if (this.ParentForm.SystemConfig3.IsStartStopLog == true)
                //            this.ParentForm.smartFileStartStopLog.WriteString(string.Format("Send Stop ({0:yyyy-MM-dd HH:mm:ss}): FormMainDisplay-UpdateDisplayAlarmView2", DateTime.Now));
                //    }
                //}

                if (alarm.Flag == true)
                {
                    if (this.ParentForm.SystemConfig1.IsExternalInputLamp == true)
                        this.ParentForm.OnExternalInputLampSignal(true);
                    if (this.ParentForm.SystemConfig1.IsExternalInputBuzzer == true)
                        this.ParentForm.OnExternalInputBuzzerSignal(true);
                }
            }
            else
            {
                this.pictureBoxIconAlarm.Visible = false;
                this.MainAlarm.Visible = false;
                this.PopUpWarningClose();

                if (this.ParentForm.SystemConfig1.IsExternalInputLamp == true)
                    this.ParentForm.OnExternalInputLampSignal(false);
                if (this.ParentForm.SystemConfig1.IsExternalInputBuzzer == true)
                    this.ParentForm.OnExternalInputBuzzerSignal(false);

                return;
            }

            this.MainAlarm.listBoxMessage.Items.Clear();

            if (alarm.IsEntrySensorError == true)
                this.AlarmOccurs(1, alarmData);
            if (alarm.IsLoadCellError == true)
                this.AlarmOccurs(2, alarmData);
            if (alarm.IsPressureSensingError == true)
                this.AlarmOccurs(3, alarmData);
            if (alarm.IsDoorInterlock == true)
                this.AlarmOccurs(4, alarmData);
            if (alarm.IsStackUpSensorError == true)
                this.AlarmOccurs(6, alarmData);
            if (alarm.IsEmergencyStop == true)
                this.AlarmOccurs(8, alarmData);
            if (alarm.IsInverterError == true)
                this.AlarmOccurs(9, alarmData);
            if (alarm.IsEntryNotDetected == true)
                this.AlarmOccurs(18, alarmData);
        }

        public void ProductChange(int productNumber)
        {
            this.buttonProductNo.Text = "**";

            this.ParentForm.TransferProductParameter(productNumber);
        }
        public void RescaleControl(ProductItem item)
        {
            this.MainBarGraph.RescaleProgressBar(item);
        }
        public void ClearCurrentData()
        {
            this.ParentForm.CurrentWeightData.ClearCount();
            this.ParentForm.SaveCounterFile(this.ParentForm.CurrentWeightData, this.ParentForm.SystemConfig1.ProductNumber - 1);

            if (this.MainBarGraph != null)
                this.MainBarGraph.Clear();

            if (this.MainLineGraph != null)
                this.MainLineGraph.Clear();

            if (this.MainList != null)
                this.MainList.Clear();

            if (this.MainDataStatistics != null)
                this.MainDataStatistics.Clear();

            if (this.MainModbus != null)
                this.MainModbus.Clear();

            this.ParentForm.ClearAlarm(0);
        }
        public void ClearAllData()
        {
            for (int i = 0; i < this.ParentForm.ProductCount; i++)
            {
                this.ParentForm.CollectionWeightData[i].ClearCount();
                this.ParentForm.SaveCounterFile(this.ParentForm.CollectionWeightData);
            }

            if (this.MainBarGraph != null)
                this.MainBarGraph.Clear();

            if (this.MainLineGraph != null)
                this.MainLineGraph.Clear();

            if (this.MainList != null)
                this.MainList.Clear();

            if (this.MainDataStatistics != null)
                this.MainDataStatistics.Clear();
        }
        public void Clear()
        {
            this.ParentForm.MissingCommIDCount = 0;
            this.ParentForm.ClearQueue();

            this.ClearCurrentData();
            this.ParentForm.TransferData(CommunicationCommand.Clear, CommunicationID.SubBoard1);
        }

        public void UpdateDisplayUser(SystemStatus status) 
        {
            string id = "", group = "", expireDate = "";

            switch (status.CurrentUser.Group)
            {
                case Define.E_UserGroup.LogOut:
                    id = "";
                    if (this.ParentForm.SystemConfig1.Language == Define.E_LanguageID.German)
                        group = "Ausloggen";
                    else if (this.ParentForm.SystemConfig1.Language == Define.E_LanguageID.Chinese)
                        group = "登出";
                    else if (this.ParentForm.SystemConfig1.Language == Define.E_LanguageID.Russian)
                        group = "Выйти.";
                    else if (this.ParentForm.SystemConfig1.Language == Define.E_LanguageID.Spanish)
                        group = "Cerrar sesión";
                    else
                        group = "Log out";

                    this.labelExpireOfPassword.Visible = false;

                    if (this.labelUserLevel.ForeColor != this.ParentForm.ColorLogOff)
                        this.labelUserLevel.ForeColor = this.labelUserID.ForeColor = this.ParentForm.ColorLogOff;

                    this.buttonUser.ButtonUp();
                    this.buttonProductNo.Enabled = false;
                    this.buttonClear.Enabled = false;
                    this.labelProductName.Enabled = false;
                    this.buttonSubMenu.Enabled = false;

                    this.buttonMenu.Enabled = false;
                    break;
                case Define.E_UserGroup.Level1:
                    id = status.CurrentUser.ID;
                    group = this.ParentForm.SystemConfig2.UserGroupLevel1Name;
                    
                    if (this.ParentForm.SystemConfig3.IsPart11 == true)
                        this.labelExpireOfPassword.Visible = true;

                    if (this.labelUserLevel.ForeColor != this.ParentForm.ColorLogOn)
                        this.labelUserLevel.ForeColor = this.labelUserID.ForeColor = this.ParentForm.ColorLogOn;

                    this.buttonUser.ButtonDown();
                    this.buttonProductNo.Enabled = this.ParentForm.CurrentUserGroup.Level1.IsMainDisplayProductNo;
                    this.labelProductName.Enabled = this.ParentForm.CurrentUserGroup.Level1.IsMainDisplayProductNo;
                    this.buttonClear.Enabled = this.ParentForm.CurrentUserGroup.Level1.IsMainDisplayClear;
                    this.buttonSubMenu.Enabled = this.ParentForm.CurrentUserGroup.Level1.IsMainDisplaySubMenu;

                    if (status.Equipment == Define.E_EquipmentStatus.Stop)
                        this.buttonMenu.Enabled = true;
                    else
                        this.buttonMenu.Enabled = false;
                    break;
                case Define.E_UserGroup.Level2:
                    id = status.CurrentUser.ID;
                    group = this.ParentForm.SystemConfig2.UserGroupLevel2Name;

                    if (this.ParentForm.SystemConfig3.IsPart11 == true)
                        this.labelExpireOfPassword.Visible = true;

                    if (this.labelUserLevel.ForeColor != this.ParentForm.ColorLogOn)
                        this.labelUserLevel.ForeColor = this.labelUserID.ForeColor = this.ParentForm.ColorLogOn;

                    this.buttonUser.ButtonDown();
                    this.buttonProductNo.Enabled = this.ParentForm.CurrentUserGroup.Level2.IsMainDisplayProductNo;
                    this.labelProductName.Enabled = this.ParentForm.CurrentUserGroup.Level2.IsMainDisplayProductNo;
                    this.buttonClear.Enabled = this.ParentForm.CurrentUserGroup.Level2.IsMainDisplayClear;
                    this.buttonSubMenu.Enabled = this.ParentForm.CurrentUserGroup.Level2.IsMainDisplaySubMenu;

                    if (status.Equipment == Define.E_EquipmentStatus.Stop)
                        this.buttonMenu.Enabled = true;
                    else
                        this.buttonMenu.Enabled = false;
                    break;
                case Define.E_UserGroup.Level3:
                    id = status.CurrentUser.ID;
                    group = this.ParentForm.SystemConfig2.UserGroupLevel3Name;
                    
                    if (this.ParentForm.SystemConfig3.IsPart11 == true)
                        this.labelExpireOfPassword.Visible = true;

                    if (this.labelUserLevel.ForeColor != this.ParentForm.ColorLogOn)
                        this.labelUserLevel.ForeColor = this.labelUserID.ForeColor = this.ParentForm.ColorLogOn;

                    this.buttonUser.ButtonDown();
                    this.buttonProductNo.Enabled = this.ParentForm.CurrentUserGroup.Level3.IsMainDisplayProductNo;
                    this.labelProductName.Enabled = this.ParentForm.CurrentUserGroup.Level3.IsMainDisplayProductNo;
                    this.buttonClear.Enabled = this.ParentForm.CurrentUserGroup.Level3.IsMainDisplayClear;
                    this.buttonSubMenu.Enabled = this.ParentForm.CurrentUserGroup.Level3.IsMainDisplaySubMenu;

                    if (status.Equipment == Define.E_EquipmentStatus.Stop)
                        this.buttonMenu.Enabled = true;
                    else
                        this.buttonMenu.Enabled = false;
                    break;
                case Define.E_UserGroup.Admin:
                    id = status.CurrentUser.ID;
                    if (this.ParentForm.SystemConfig1.Language == Define.E_LanguageID.German)
                        group = "Administrator";
                    else if (this.ParentForm.SystemConfig1.Language == Define.E_LanguageID.Chinese)
                        group = "行政";
                    else if (this.ParentForm.SystemConfig1.Language == Define.E_LanguageID.Russian)
                        group = "Администратор";
                    else if (this.ParentForm.SystemConfig1.Language == Define.E_LanguageID.Spanish)
                        group = "Administrator";
                    else
                        group = "Administrator";

                    if (this.ParentForm.SystemConfig3.IsPart11 == true)
                        this.labelExpireOfPassword.Visible = true;

                    if (this.labelUserLevel.ForeColor != this.ParentForm.ColorLogOn)
                        this.labelUserLevel.ForeColor = this.labelUserID.ForeColor = this.ParentForm.ColorLogOn;

                    this.buttonUser.ButtonDown();
                    this.buttonProductNo.Enabled = true;
                    this.buttonClear.Enabled = true;
                    this.labelProductName.Enabled = true;
                    this.buttonSubMenu.Enabled = true;

                    if (status.Equipment == Define.E_EquipmentStatus.Stop)
                        this.buttonMenu.Enabled = true;
                    else
                        this.buttonMenu.Enabled = false;
                    break;
                case Define.E_UserGroup.Developer:
                    id = status.CurrentUser.ID;
                    if (this.ParentForm.SystemConfig1.Language == Define.E_LanguageID.German)
                        group = "Entwickler";
                    else if (this.ParentForm.SystemConfig1.Language == Define.E_LanguageID.Chinese)
                        group = "开发商";
                    else if (this.ParentForm.SystemConfig1.Language == Define.E_LanguageID.Russian)
                        group = "Разработчик";
                    else if (this.ParentForm.SystemConfig1.Language == Define.E_LanguageID.Spanish)
                        group = "Desarrollador";
                    else
                        group = "Developer";

                    if (this.ParentForm.SystemConfig3.IsPart11 == true)
                        this.labelExpireOfPassword.Visible = true;

                    if (this.labelUserLevel.ForeColor != this.ParentForm.ColorLogOn)
                        this.labelUserLevel.ForeColor = this.labelUserID.ForeColor = this.ParentForm.ColorLogOn;

                    this.buttonUser.ButtonDown();
                    this.buttonProductNo.Enabled = true;
                    this.buttonClear.Enabled = true;
                    this.labelProductName.Enabled = true;
                    this.buttonSubMenu.Enabled = true;

                    if (status.Equipment == Define.E_EquipmentStatus.Stop)
                        this.buttonMenu.Enabled = true;
                    else
                        this.buttonMenu.Enabled = false;
                    break;
                case Define.E_UserGroup.NotLogin:
                    this.buttonProductNo.Enabled = this.ParentForm.CurrentUserGroup.NotLogin.IsMainDisplayProductNo;
                    this.labelProductName.Enabled = this.ParentForm.CurrentUserGroup.NotLogin.IsMainDisplayProductNo;
                    this.buttonClear.Enabled = this.ParentForm.CurrentUserGroup.NotLogin.IsMainDisplayClear;
                    this.buttonSubMenu.Enabled = this.ParentForm.CurrentUserGroup.NotLogin.IsMainDisplaySubMenu;

                    if (status.Equipment == Define.E_EquipmentStatus.Stop)
                        this.buttonMenu.Enabled = true;
                    else
                        this.buttonMenu.Enabled = false;
                    break;
                default:
                    id = "";
                    if (this.ParentForm.SystemConfig1.Language == Define.E_LanguageID.German)
                        group = "Ausloggen";
                    else if (this.ParentForm.SystemConfig1.Language == Define.E_LanguageID.Chinese)
                        group = "登出";
                    else if (this.ParentForm.SystemConfig1.Language == Define.E_LanguageID.Russian)
                        group = "Выйти.";
                    else if (this.ParentForm.SystemConfig1.Language == Define.E_LanguageID.Spanish)
                        group = "Cerrar sesión";
                    else
                        group = "Log out";

                    this.labelExpireOfPassword.Visible = false;

                    if (this.labelUserLevel.ForeColor != this.ParentForm.ColorLogOff)
                        this.labelUserLevel.ForeColor = this.labelUserID.ForeColor = this.ParentForm.ColorLogOff;

                    this.buttonUser.ButtonUp();
                    this.buttonProductNo.Enabled = false;
                    this.buttonClear.Enabled = false;
                    this.buttonMenu.Enabled = false;
                    this.labelProductName.Enabled = false;
                    break;
            }

            if (this.ParentForm.SystemConfig1.IsLogin == true)
            {
                if (this.ParentForm.SystemConfig3.IsPart11 == true)
                {
                    expireDate = this.DisplayExpireOfPassword(status.CurrentUser.Group);
                    if (expireDate != "-")
                    {
                        int intExpireDate = int.Parse(expireDate);

                        if (intExpireDate == 0)
                        {
                            this.labelExpireOfPassword.ForeColor = this.ParentForm.ColorLogOff;
                            this.labelExpireOfPassword.Text = "D-0";
                        }
                        else if (intExpireDate < 0)
                        {
                            if (intExpireDate * -1 > this.ParentForm.CurrentSystemStatus.CurrentUser.ExpirePassword)
                                expireDate = "-" + (this.ParentForm.CurrentSystemStatus.CurrentUser.ExpirePassword - 1).ToString();

                            this.labelExpireOfPassword.Text = "D" + expireDate;
                            if (intExpireDate >= -10)
                                this.labelExpireOfPassword.ForeColor = this.ParentForm.ColorLogOff;
                            else
                                this.labelExpireOfPassword.ForeColor = this.ParentForm.ColorLogOn;
                        }
                        else
                        {
                            this.labelExpireOfPassword.ForeColor = this.ParentForm.ColorLogOn;
                            this.labelExpireOfPassword.Text = "D+" + expireDate;
                        }
                    }
                    else
                    {
                        this.labelExpireOfPassword.ForeColor = this.ParentForm.ColorLogOn;
                        this.labelExpireOfPassword.Text = "-";
                    }
                }
                else
                {
                    this.labelExpireOfPassword.ForeColor = this.ParentForm.ColorLogOn;
                    this.labelExpireOfPassword.Text = "-";
                }
            }

            if (this.labelUserLevel.Text != group)
                this.labelUserLevel.Text = group;
            if (this.labelUserID.Text != id)
                this.labelUserID.Text = id;
        }
        public void UpdateMainTitleDisplay(ProductItem pItem)
        {
            string value = "";

            value = pItem.Number.ToString();
            if (this.buttonProductNo.Text != value)
                this.buttonProductNo.Text = value;

            value = pItem.Name;
            if (this.labelProductName.Text != value)
                this.labelProductName.Text = value;

            value = pItem.LotNo;
            if (this.labelLotNo.Text != value)
                this.labelLotNo.Text = value;

            this.ParentForm.Update30000ModbusItem();
        }
        public void UpdateEquipmentStatusDisplay(Define.E_EquipmentStatus status)
        {
            if (status == Define.E_EquipmentStatus.Start)
            {
                this.pictureBoxStart.Visible = true;
                this.pictureBoxStop.Visible = false;
                this.buttonProductNo.Enabled = false;
                this.labelProductName.Enabled = false;

                this.buttonConveyorUpDown.Enabled = false;

                this.MainBarGraph.UpdateEquipmentStatusDisplay(status);
                this.MainLineGraph.UpdateEquipmentStatusDisplay(status);
                this.MainList.UpdateEquipmentStatusDisplay(status);
                this.MainWeightBigScreen.UpdateEquipmentStatusDisplay(status);
                this.MainWeightSmall.UpdateEquipmentStatusDisplay(status);

                //this.CurrentDisplay = Define.E_MainDisplayStore.DisplayStartBarGraph;
                //this.DisplayBottomMain(this.CurrentDisplay);
            }
            else
            {
                this.pictureBoxStart.Visible = false;
                this.pictureBoxStop.Visible = true;

                this.buttonConveyorUpDown.Enabled = true;
                this.buttonConveyorUpDown.ButtonUp();

                if (this.ParentForm.CurrentSystemStatus.CurrentUser.Group == Define.E_UserGroup.LogOut)
                {
                    this.buttonProductNo.Enabled = false;
                    this.labelProductName.Enabled = false;
                }
                else
                {
                    this.buttonProductNo.Enabled = true;
                    this.labelProductName.Enabled = true;
                    this.buttonMenu.Enabled = true;
                }

                this.MainBarGraph.UpdateEquipmentStatusDisplay(status);
                this.MainLineGraph.UpdateEquipmentStatusDisplay(status);
                this.MainList.UpdateEquipmentStatusDisplay(status);
                this.MainWeightBigScreen.UpdateEquipmentStatusDisplay(status);
                this.MainWeightSmall.UpdateEquipmentStatusDisplay(status);

                //this.CurrentDisplay = Define.E_MainDisplayStore.DisplayStartBarGraph;
                //this.DisplayBottomMain(this.CurrentDisplay);
            }
        }
        public void UpdateCurrentProductDisplay(Define.E_EquipmentStatus status, ProductItem pItem, WeightData wData)
        {
            string value = "";

            value = pItem.Number.ToString();
            if (this.buttonProductNo.Text != value)
                this.buttonProductNo.Text = value;

            value = pItem.Name;
            if (this.labelProductName.Text != value)
                this.labelProductName.Text = value;

            value = pItem.LotNo;
            if (this.labelLotNo.Text != value)
                this.labelLotNo.Text = value;

            if (this.MainWeightBigScreen != null)
                this.MainWeightBigScreen.UpdateCurrentProductDisplay(status, pItem, wData);
            if (this.MainWeightSmall != null)
                this.MainWeightSmall.UpdateCurrentProductDisplay(status, pItem, wData);
            if (this.MainBarGraph != null)
                this.MainBarGraph.UpdateCurrentProductDisplay(status, pItem, wData);
            if (this.MainLineGraph != null)
                this.MainLineGraph.UpdateCurrentProductDisplay(status, pItem, wData);
            if (this.MainList != null)
                this.MainList.UpdateCurrentProductDisplay(status, pItem, wData);
            if (this.MainDataStatistics != null)
                this.MainDataStatistics.UpdateCurrentProductDisplay(status, pItem, wData);
            if(this.MainSubMenu != null && this.CurrentDisplay == Define.E_MainDisplayStore.SubMenu)
                this.MainSubMenu.UpdateControl(this.ParentForm.CurrentJudgmentSetItem, this.ParentForm.CurrentSystemParameter4);
        }
        public void UpdateStopWeightDisplay(Define.E_EquipmentStatus status, WeightData data)
        {
            string value = "";

            if (this.MainWeightBigScreen != null)
                this.MainWeightBigScreen.UpdateStopWeightDisplay(status, data);
            if (this.MainWeightSmall != null)
                this.MainWeightSmall.UpdateStopWeightDisplay(status, data);
        }
        public void UpdateStartWeightDisplay(Define.E_EquipmentStatus status, ProductItem pItem, WeightData wData)
        {
            string value = "";

            if (wData.JudgmentStatus == Define.E_JudgmentStatus.Empty)
                return;

            if (this.MainWeightBigScreen != null)
                this.MainWeightBigScreen.UpdateStartWeightDisplay(status, wData);
            if (this.MainWeightSmall != null)
                this.MainWeightSmall.UpdateStartWeightDisplay(status, wData);
            if (this.MainBarGraph != null)
                this.MainBarGraph.UpdateStartWeightDisplay(status, wData);
            if (this.MainLineGraph != null)
                this.MainLineGraph.UpdateStartWeightDisplay(status, wData);
            if (this.MainList != null)
                this.MainList.UpdateStartWeightDisplay(status, pItem, wData);
            if (this.MainDataStatistics != null)
                this.MainDataStatistics.UpdateStartWeightDisplay(status, wData);
        }
        public void ChangeProductNumber(int productNumber)
        {
            this.ParentForm.SetTrackingHistoryData(Define.E_TrackingParameter.ProductNo, "",
                    this.ParentForm.SystemConfig1.ProductNumber.ToString(), productNumber.ToString());

            this.ParentForm.ClearAlarm(0);
            this.SendCommProductChange(productNumber);
        }
        public void SendCommProductChange(int productNumber)
        {
            this.buttonProductNo.Text = "**";
            this.ParentForm.TransferProductParameter(productNumber);
        }
        public void UpdateBarcodeDisplay(Barcode barcode)
        {
            if (this.MainWeightBigScreen != null)
                this.MainWeightBigScreen.UpdateBarcodeDisplay(barcode);
            if (this.MainWeightSmall != null)
                this.MainWeightSmall.UpdateBarcodeDisplay(barcode);
        }
        public void UpdateEthernetStatusDisplay(bool status)
        {
            if (this.MainWeightBigScreen != null)
                this.MainWeightBigScreen.UpdateEthernetStatusDisplay(status);
            if (this.MainWeightSmall != null)
                this.MainWeightSmall.UpdateEthernetStatusDisplay(status);
        }

        public void UpdateMainDisplay(SystemStatus status)
        {
            switch (status.CurrentUser.Group)
            {
                case Define.E_UserGroup.LogOut:
                    this.buttonProductNo.Enabled = false;
                    this.buttonClear.Enabled = false;
                    this.labelProductName.Enabled = false;
                    this.buttonMenu.Enabled = false;
                    break;
                case Define.E_UserGroup.Level1:
                    this.buttonProductNo.Enabled = this.ParentForm.CurrentUserGroup.Level1.IsMainDisplayProductNo;
                    this.labelProductName.Enabled = this.ParentForm.CurrentUserGroup.Level1.IsMainDisplayProductNo;
                    this.buttonClear.Enabled = this.ParentForm.CurrentUserGroup.Level1.IsMainDisplayClear;
                    this.buttonSubMenu.Enabled = this.ParentForm.CurrentUserGroup.Level1.IsMainDisplaySubMenu;
                    break;
                case Define.E_UserGroup.Level2:
                    this.buttonProductNo.Enabled = this.ParentForm.CurrentUserGroup.Level2.IsMainDisplayProductNo;
                    this.labelProductName.Enabled = this.ParentForm.CurrentUserGroup.Level2.IsMainDisplayProductNo;
                    this.buttonClear.Enabled = this.ParentForm.CurrentUserGroup.Level2.IsMainDisplayClear;
                    this.buttonSubMenu.Enabled = this.ParentForm.CurrentUserGroup.Level2.IsMainDisplaySubMenu;
                    break;
                case Define.E_UserGroup.Level3:
                    this.buttonProductNo.Enabled = this.ParentForm.CurrentUserGroup.Level3.IsMainDisplayProductNo;
                    this.labelProductName.Enabled = this.ParentForm.CurrentUserGroup.Level3.IsMainDisplayProductNo;
                    this.buttonClear.Enabled = this.ParentForm.CurrentUserGroup.Level3.IsMainDisplayClear;
                    this.buttonSubMenu.Enabled = this.ParentForm.CurrentUserGroup.Level3.IsMainDisplaySubMenu;
                    break;
                case Define.E_UserGroup.Admin:
                case Define.E_UserGroup.Developer:
                    this.buttonProductNo.Enabled = true;
                    this.buttonClear.Enabled = true;
                    this.labelProductName.Enabled = true;
                    this.buttonSubMenu.Enabled = true;
                    break;
                case Define.E_UserGroup.NotLogin:
                    this.buttonProductNo.Enabled = this.ParentForm.CurrentUserGroup.NotLogin.IsMainDisplayProductNo;
                    this.labelProductName.Enabled = this.ParentForm.CurrentUserGroup.NotLogin.IsMainDisplayProductNo;
                    this.buttonClear.Enabled = this.ParentForm.CurrentUserGroup.NotLogin.IsMainDisplayClear;
                    this.buttonSubMenu.Enabled = this.ParentForm.CurrentUserGroup.NotLogin.IsMainDisplaySubMenu;
                    break;
                default:
                    this.buttonUser.ButtonUp();
                    this.buttonProductNo.Enabled = false;
                    this.buttonClear.Enabled = false;
                    this.buttonMenu.Enabled = false;
                    this.labelProductName.Enabled = false;
                    break;
            }
        }
        private void DirectLogin(string id, string pass)
        {
            UserManager.UserMgr_user_info_t userInfo = new UserManager.UserMgr_user_info_t();

            UserManager.UserManager_UserLoginDirect(id, pass, ref userInfo);
            //Console.WriteLine(string.Format("status : {0}", userInfo.status));
            //Console.WriteLine("ID : " + id);
            //Console.WriteLine("pass : " + pass);

            if (userInfo.status == 0)
            {
                #region 로그인 성공
                if (userInfo.active_level == 1)
                    this.ParentForm.CurrentSystemStatus.CurrentUser.Group = Define.E_UserGroup.Level1;
                else if (userInfo.active_level == 2)
                    this.ParentForm.CurrentSystemStatus.CurrentUser.Group = Define.E_UserGroup.Level2;
                else if (userInfo.active_level == 3)
                    this.ParentForm.CurrentSystemStatus.CurrentUser.Group = Define.E_UserGroup.Level3;
                else if (userInfo.active_level == 9)
                    this.ParentForm.CurrentSystemStatus.CurrentUser.Group = Define.E_UserGroup.Admin;
                else if (userInfo.active_level == 10)
                    this.ParentForm.CurrentSystemStatus.CurrentUser.Group = Define.E_UserGroup.Developer;

                this.ParentForm.CurrentSystemStatus.CurrentUser.ID = userInfo.user_id;
                this.ParentForm.CurrentSystemStatus.CurrentUser.Password = userInfo.user_pw;

                this.ParentForm.CurrentSystemStatus.CurrentUser.ExpireId = userInfo.id_expire_period;
                this.ParentForm.CurrentSystemStatus.CurrentUser.ExpirePassword = userInfo.password_expire_period;

                DateTime time = DateTime.ParseExact(userInfo.password_register_date.GetDateTime(), "yyyyMMddHHmmss", null);
                this.ParentForm.CurrentSystemStatus.CurrentUser.DatePasswordRegister = time;
                time = DateTime.ParseExact(userInfo.id_login_date.GetDateTime(), "yyyyMMddHHmmss", null);
                this.ParentForm.CurrentSystemStatus.CurrentUser.DateIdLogin = time;
                time = DateTime.ParseExact(userInfo.id_expire_date.GetDateTime(), "yyyyMMddHHmmss", null);
                this.ParentForm.CurrentSystemStatus.CurrentUser.DateIdExpire = time;
                time = DateTime.ParseExact(userInfo.password_expire_date.GetDateTime(), "yyyyMMddHHmmss", null);
                this.ParentForm.CurrentSystemStatus.CurrentUser.DatePasswordExpire = time;

                this.ParentForm.CurrentSystemStatus.CurrentUser.IsLockAccount = userInfo.id_flock_status == 0 ? false : true;
                this.ParentForm.CurrentSystemStatus.CurrentUser.IsLockPassword = userInfo.password_flock_status == 0 ? false : true;
                this.ParentForm.CurrentSystemStatus.CurrentUser.IsAdmin = userInfo.fadmin == 0 ? false : true;
                this.ParentForm.CurrentSystemStatus.CurrentUser.ActiveLevel = userInfo.active_level;
                this.ParentForm.CurrentSystemStatus.CurrentUser.IsFirstPassword = userInfo.fFirstPW;
                #endregion

                this.UI_Invoke(delegate
                {
                    this.UpdateDisplayUser(this.ParentForm.CurrentSystemStatus);
                });
            }
        }
        private void PasswordExpirationCheck(UserItem user)
        {
            int expiryDay = 0;

            // 만료일 -10 일때 메시지 띄우기
            expiryDay = user.GetPasswordExpiryDday();
            if (expiryDay >= -10)
            {
                //Console.WriteLine("password : " + expiryDay.ToString());
                if (expiryDay < 0)
                    expiryDay *= -1;

                DialogFormYesNo myDlg = new DialogFormYesNo(this.ParentForm.SystemConfig1.Language, 2, expiryDay.ToString());
                if (myDlg.ShowDialog() == DialogResult.Yes)
                {
                    // 비밀 번호 변경 띄우기
                    DialogFormLogOn logOn = new DialogFormLogOn(this.ParentForm, true, true);
                    if (logOn.ShowDialog() == DialogResult.OK)
                    {

                    }
                }
            }
        }
        private void Login()
        {
            int extract = 0;
            DialogResult result;

            DialogFormLogOn logOn = new DialogFormLogOn(this.ParentForm, false, false);
            result = logOn.ShowDialog();
            if (result == DialogResult.OK)
            {
                if (this.ParentForm.CurrentSystemStatus.CurrentUser.Group == Define.E_UserGroup.Level1 ||
                    this.ParentForm.CurrentSystemStatus.CurrentUser.Group == Define.E_UserGroup.Level2 ||
                    this.ParentForm.CurrentSystemStatus.CurrentUser.Group == Define.E_UserGroup.Level3)
                {
                    // 비밀번호 만료일 10일 미만 체크 후 비밀번호 변경
                    this.PasswordExpirationCheck(this.ParentForm.CurrentSystemStatus.CurrentUser);
                }

                this.ParentForm.ChildFormMenu.CenterEquipUserGroupEditor.UpdateAllMenu(this.ParentForm.CurrentSystemStatus);
                this.DisplayRefresh(this.ParentForm.CurrentSystemStatus);

                this.buttonUser.ButtonDown();
                this.UpdateDisplayUser(this.ParentForm.CurrentSystemStatus);
                this.ParentForm.ChildFormMenu.UpdateDisplayUser(this.ParentForm.CurrentSystemStatus);

                switch (this.CurrentDisplay)
                {
                    case Define.E_MainDisplayStore.SubMenu:
                        this.MainSubMenu.DisplayRefresh(this.ParentForm.CurrentSystemStatus);
                        break;
                    case Define.E_MainDisplayStore.BarGraph:
                        this.MainBarGraph.DisplayRefresh(this.ParentForm.CurrentSystemStatus);
                        break;
                    case Define.E_MainDisplayStore.LineGraph:
                        this.MainLineGraph.DisplayRefresh(this.ParentForm.CurrentSystemStatus);
                        break;
                    case Define.E_MainDisplayStore.List:
                        this.MainList.DisplayRefresh(this.ParentForm.CurrentSystemStatus);
                        break;
                    case Define.E_MainDisplayStore.DataStat:
                        this.MainDataStatistics.DisplayRefresh(this.ParentForm.CurrentSystemStatus);
                        break;
                    default:
                        break;
                }
            }
            else if (result == DialogResult.Abort)
            {
                // 비밀 번호 변경 띄우기
                DialogFormLogOn logOn1 = new DialogFormLogOn(this.ParentForm, false, true);
                if (logOn1.ShowDialog() == DialogResult.OK)
                {
                    this.ParentForm.ChildFormMenu.CenterEquipUserGroupEditor.UpdateAllMenu(this.ParentForm.CurrentSystemStatus);
                    this.DisplayRefresh(this.ParentForm.CurrentSystemStatus);

                    this.buttonUser.ButtonDown();
                    this.UpdateDisplayUser(this.ParentForm.CurrentSystemStatus);
                    this.ParentForm.ChildFormMenu.UpdateDisplayUser(this.ParentForm.CurrentSystemStatus);
                }
                else
                    this.buttonUser.ButtonUp();
            }
            else
            {
                this.buttonUser.ButtonUp();
            }
        }
        public void Logout()
        {
            this.ParentForm.CurrentSystemStatus.CurrentUser.Group = Define.E_UserGroup.LogOut;
            this.buttonUser.ButtonUp();
            this.ChangeID = "";

            this.ParentForm.SetTrackingHistoryData(Define.E_TrackingOperation.Logout, "");

            this.DisplayRefresh(this.ParentForm.CurrentSystemStatus);
            this.UpdateDisplayUser(this.ParentForm.CurrentSystemStatus);

            switch (this.CurrentDisplay)
            {
                case Define.E_MainDisplayStore.SubMenu:
                    this.MainSubMenu.DisplayRefresh(this.ParentForm.CurrentSystemStatus);
                    break;
                case Define.E_MainDisplayStore.BarGraph:
                    this.MainBarGraph.DisplayRefresh(this.ParentForm.CurrentSystemStatus);
                    break;
                case Define.E_MainDisplayStore.LineGraph:
                    this.MainLineGraph.DisplayRefresh(this.ParentForm.CurrentSystemStatus);
                    break;
                case Define.E_MainDisplayStore.List:
                    this.MainList.DisplayRefresh(this.ParentForm.CurrentSystemStatus);
                    break;
                case Define.E_MainDisplayStore.DataStat:
                    this.MainDataStatistics.DisplayRefresh(this.ParentForm.CurrentSystemStatus);
                    break;
                default:
                    break;
            }
        }
        public void Part11AutomaticLogoutReset()
        {
            UserManager.UserManager_AutoLogoutTimeoutReset();
        }

        public void UpdateDisplayOverRun(string value)
        {
            this.labelOverrun.Text = value;
        }

        private bool UI_Invoke(ThreadStart invoker)
        {
            try
            {
                if (this.InvokeRequired)
                {
                    if (this.IsDisposed)
                        return true;

                    this.Invoke(invoker);
                }
                else
                {
                    invoker();
                }

                return true;

            }
            catch (Exception e)
            {
                return false;
            }

        }

        public void PopUpWarning(string warning)
        {
            this.labelAlarmWindow.Text = warning;
            this.labelAlarmWindow.BringToFront();
            this.labelAlarmWindow.Visible = true;
        }
        public void PopUpWarningClose()
        {
            if (this.labelAlarmWindow.Visible == true)
                this.labelAlarmWindow.Visible = false;
        }

        public string DisplayExpireOfPassword(Define.E_UserGroup group)
        {
            string ret = "";

            if (group == Define.E_UserGroup.Admin || group == Define.E_UserGroup.Developer)
                ret = "-";
            else
            {
                //TimeSpan resultTime = DateTime.Now - this.ParentForm.CurrentSystemStatus.CurrentUser.DateExpireRegister;
                TimeSpan dayDiff = DateTime.Now.Date - this.ParentForm.CurrentSystemStatus.CurrentUser.DatePasswordExpire.Date;
                ret = dayDiff.Days.ToString();
            }

            return ret;
        }
        public void CallBackUserListModifyInfoData(UserManager.UserMgr_user_info_t user)
        {
            this.ParentForm.CurrentSystemStatus.CurrentUser.DatePasswordRegister = DateTime.Now.AddDays(this.ParentForm.CurrentSystemStatus.CurrentUser.ExpirePassword - 1);
            this.DisplayExpireOfPassword(this.ParentForm.CurrentSystemStatus.CurrentUser.Group);
        }
        public void CallBackUserListLoginTimeoutDataEvent(UserManager.UserMgr_login_timeout_t user)
        {
            string code = "", message1 = "", message2 = "";
            int warningTime = 0;

            if (user.remainder_time != 0)
            {
                switch (this.ParentForm.SystemConfig1.Language)
                {
                    case Define.E_LanguageID.Korean:
                        code = "로그인";
                        message1 = "잠시 후에 로그아웃 됩니다.";
                        message2 = "";
                        break;
                    case Define.E_LanguageID.English:
                        code = "Login";
                        message1 = "You will be logged out after a while.";
                        message2 = "";
                        break;
                    case Define.E_LanguageID.Chinese:
                        code = "登录";
                        message1 = "您将在一段时间后退出.";
                        message2 = "";
                        break;
                    case Define.E_LanguageID.Russian:
                        code = "Авторизоваться";
                        message1 = "Вы выйдете из системы через";
                        message2 = "некоторое время.";
                        break;
                    case Define.E_LanguageID.German:
                        code = "Anmeldung";
                        message1 = "Sie werden nach einiger Zeit abgemeldet.";
                        message2 = "";
                        break;
                    case Define.E_LanguageID.Spanish:
                        code = "Acceso";
                        message1 = "Se cerrará la sesión después de un tiempo.";
                        message2 = "";
                        break;
                    default:
                        break;
                }

                warningTime = this.ParentForm.FlagAutomaticLogoutWarningTime - 2;

                this.UI_Invoke(delegate
                {
                    DialogFormMessage msg = new DialogFormMessage(Define.E_MessageBoxIcon.Asterisk, code, message1, message2, warningTime);
                    msg.ShowDialog();
                });
            }
            else
            {
                switch (this.ParentForm.SystemConfig1.Language)
                {
                    case Define.E_LanguageID.Korean:
                        code = "Login";
                        message1 = "자동 로그아웃 되었습니다";
                        message2 = "";
                        break;
                    case Define.E_LanguageID.English:
                        code = "Login";
                        message1 = "Automatically logged out";
                        message2 = "";
                        break;
                    case Define.E_LanguageID.Chinese:
                        code = "登录";
                        message1 = "自动登出.";
                        message2 = "";
                        break;
                    case Define.E_LanguageID.Russian:
                        code = "Авторизоваться";
                        message1 = "Автоматически вышел из системы";
                        message2 = "";
                        break;
                    case Define.E_LanguageID.German:
                        code = "Anmeldung";
                        message1 = "Automatisch abgemeldet.";
                        message2 = "";
                        break;
                    case Define.E_LanguageID.Spanish:
                        code = "Acceso";
                        message1 = "Cerrar sesión automáticamente.";
                        message2 = "";
                        break;
                    default:
                        break;
                }

                // User Logout
                UserManager.UserManager_UserLogout();

                this.UI_Invoke(delegate
                {
                    this.Logout();
                });

                this.UI_Invoke(delegate
                {
                    DialogFormMessage msg = new DialogFormMessage(Define.E_MessageBoxIcon.Asterisk, code, message1, message2, 0);
                    msg.ShowDialog();
                });
            }
        }
        public void CallBackUserListModifyInfoDataEvent(UserManager.UserMgr_user_info_t userInfo)
        {
            //Console.WriteLine("status : " + userInfo.status.ToString());
            //Console.WriteLine("ID : " + userInfo.user_id);
            //Console.WriteLine("pass : " + userInfo.user_pw);
            if (userInfo.status == 0)
            {
                //Console.WriteLine("Group : " + this.ParentForm.SystemConfig.CurrentUser.Group.ToString());
                if (this.ParentForm.CurrentSystemStatus.CurrentUser.Group == Define.E_UserGroup.LogOut)
                {
                    //Console.WriteLine("DirectLogin");
                    this.DirectLogin(userInfo.user_id, userInfo.user_pw);
                }
                else
                {
                    if (userInfo.active_level == 1)
                        this.ParentForm.CurrentSystemStatus.CurrentUser.Group = Define.E_UserGroup.Level1;
                    else if (userInfo.active_level == 2)
                        this.ParentForm.CurrentSystemStatus.CurrentUser.Group = Define.E_UserGroup.Level2;
                    else if (userInfo.active_level == 3)
                        this.ParentForm.CurrentSystemStatus.CurrentUser.Group = Define.E_UserGroup.Level3;
                    else if (userInfo.active_level == 9)
                        this.ParentForm.CurrentSystemStatus.CurrentUser.Group = Define.E_UserGroup.Admin;
                    else if (userInfo.active_level == 10)
                        this.ParentForm.CurrentSystemStatus.CurrentUser.Group = Define.E_UserGroup.Developer;

                    this.ParentForm.CurrentSystemStatus.CurrentUser.ID = userInfo.user_id;
                    this.ParentForm.CurrentSystemStatus.CurrentUser.Password = userInfo.user_pw;

                    this.ParentForm.CurrentSystemStatus.CurrentUser.ExpireId = userInfo.id_expire_period;
                    this.ParentForm.CurrentSystemStatus.CurrentUser.ExpirePassword = userInfo.password_expire_period;

                    DateTime time = DateTime.ParseExact(userInfo.password_register_date.GetDateTime(), "yyyyMMddHHmmss", null);
                    this.ParentForm.CurrentSystemStatus.CurrentUser.DatePasswordRegister = time;
                    time = DateTime.ParseExact(userInfo.id_login_date.GetDateTime(), "yyyyMMddHHmmss", null);
                    this.ParentForm.CurrentSystemStatus.CurrentUser.DateIdLogin = time;
                    time = DateTime.ParseExact(userInfo.id_expire_date.GetDateTime(), "yyyyMMddHHmmss", null);
                    this.ParentForm.CurrentSystemStatus.CurrentUser.DateIdExpire = time;
                    time = DateTime.ParseExact(userInfo.password_expire_date.GetDateTime(), "yyyyMMddHHmmss", null);
                    this.ParentForm.CurrentSystemStatus.CurrentUser.DatePasswordExpire = time;

                    this.ParentForm.CurrentSystemStatus.CurrentUser.IsLockAccount = userInfo.id_flock_status == 0 ? false : true;
                    this.ParentForm.CurrentSystemStatus.CurrentUser.IsLockPassword = userInfo.password_flock_status == 0 ? false : true;
                    this.ParentForm.CurrentSystemStatus.CurrentUser.IsAdmin = userInfo.fadmin == 0 ? false : true;
                    this.ParentForm.CurrentSystemStatus.CurrentUser.ActiveLevel = userInfo.active_level;
                    this.ParentForm.CurrentSystemStatus.CurrentUser.IsFirstPassword = userInfo.fFirstPW;
                }
            }
        }

        public void UpdateModbusScreen()
        {
            if (this.CurrentDisplay == Define.E_MainDisplayStore.Modbus)
            {
                this.ParentForm.Update30000ModbusItem();
                this.MainModbus.DisplayRefresh(this.ParentForm.CurrentSystemStatus);
            }
        }
        public void MainBottomModbusIconAdd(bool bValue)
        {
            this.ParentForm.IsOPCModbusUsing = bValue;
            this.CurrentBottomMenuControlEnable();
        }

        public void CurrentBottomMenuControlEnable()
        {
            Collection<SmartButton> buttons = new Collection<SmartButton>();
            bool feedback = this.MainFeedback.IsUsingFeedback();
            int sampleCount = int.Parse(this.ParentForm.CurrentSystemParameter2.OPT1SamplingCount);
            bool modbus = this.ParentForm.IsOPCModbusUsing;

            buttons.Clear();
            buttons.Add(this.buttonFeedback);
            buttons.Add(this.buttonModbus);
            for (int i = 0; i < buttons.Count; i++)
                buttons[i].Visible = false;

            buttons.Clear();
            if (feedback == true && sampleCount != 0)
            {
                buttons.Add(this.buttonFeedback);

                if (this.ParentForm.CurrentSystemParameter2.OPT1OverRangeInt <= 0 && this.ParentForm.CurrentSystemParameter2.OPT1UnderRangeInt <= 0)
                {
                    this.ParentForm.UpdateFeedbackData(this.ParentForm.CurrentProductItem, this.ParentForm.CurrentSystemParameter2);
                    this.ParentForm.UpdateFeedbackDeviation(this.ParentForm.CurrentProductItem, this.ParentForm.CurrentSystemParameter2);
                }
                else
                    this.ParentForm.UpdateFeedbackDeviation(this.ParentForm.CurrentProductItem, this.ParentForm.CurrentSystemParameter2);
            }
            if (modbus == true)
                buttons.Add(this.buttonModbus);

            for (int i = 0; i < buttons.Count; i++)
            {
                this.BottomButtonLocation(i + 1, buttons[i]);
                buttons[i].Visible = true;
            }
        }
        public void UpdateDisplayMenuButton(Define.E_MainDisplayStore main)
        {
            if (this.buttonSubMenu.ButtonStatus != SmartButton.BUTSTATUS.UP)
                this.buttonSubMenu.ButtonUp();
            if (this.buttonBargraph.ButtonStatus != SmartButton.BUTSTATUS.UP)
                this.buttonBargraph.ButtonUp();
            if (this.buttonLinegraph.ButtonStatus != SmartButton.BUTSTATUS.UP)
                this.buttonLinegraph.ButtonUp();
            if (this.buttonList.ButtonStatus != SmartButton.BUTSTATUS.UP)
                this.buttonList.ButtonUp();
            if (this.buttonDataStat.ButtonStatus != SmartButton.BUTSTATUS.UP)
                this.buttonDataStat.ButtonUp();
            if (this.buttonFeedback.ButtonStatus != SmartButton.BUTSTATUS.UP)
                this.buttonFeedback.ButtonUp();
            if (this.buttonModbus.ButtonStatus != SmartButton.BUTSTATUS.UP)
                this.buttonModbus.ButtonUp();
            
            switch (main)
            {
                case Define.E_MainDisplayStore.SubMenu:
                    if (this.buttonSubMenu.ButtonStatus != SmartButton.BUTSTATUS.DOWN)
                        this.buttonSubMenu.ButtonDown();
                    break;
                case Define.E_MainDisplayStore.BarGraph:
                    if (this.buttonBargraph.ButtonStatus != SmartButton.BUTSTATUS.DOWN)
                        this.buttonBargraph.ButtonDown();
                    break;
                case Define.E_MainDisplayStore.LineGraph:
                    if (this.buttonLinegraph.ButtonStatus != SmartButton.BUTSTATUS.DOWN)
                        this.buttonLinegraph.ButtonDown();
                    break;
                case Define.E_MainDisplayStore.List:
                    if (this.buttonList.ButtonStatus != SmartButton.BUTSTATUS.DOWN)
                        this.buttonList.ButtonDown();
                    break;
                case Define.E_MainDisplayStore.DataStat:
                    if (this.buttonDataStat.ButtonStatus != SmartButton.BUTSTATUS.DOWN)
                        this.buttonDataStat.ButtonDown();
                    break;
                case Define.E_MainDisplayStore.Feedback:
                    if (this.buttonFeedback.ButtonStatus != SmartButton.BUTSTATUS.DOWN)
                        this.buttonFeedback.ButtonDown();
                    break;
                case Define.E_MainDisplayStore.Modbus:
                    if (this.buttonModbus.ButtonStatus != SmartButton.BUTSTATUS.DOWN)
                        this.buttonModbus.ButtonDown();
                    break;
                default:
                    break;
            }
        }
        public void DisplayBottomMain(Define.E_MainDisplayStore main)
        {
            switch (main)
            {
                case Define.E_MainDisplayStore.SubMenu:
                    this.UpdateDisplayMenuButton(Define.E_MainDisplayStore.SubMenu);
                    this.MainSubMenu.DisplayRefresh(this.ParentForm.CurrentSystemStatus);
                    this.MainWeightSmall.DisplayRefresh(this.ParentForm.CurrentSystemStatus);
                    //this.MainDisplayWeightBigScreen.DisplayRefresh(this.ParentForm.CurrentSystemStatus);
                    this.MainSubMenu.BringToFront();
                    //this.MainDisplayWeightBigScreen.BringToFront();
                    this.MainWeightSmall.BringToFront();
                    break;
                case Define.E_MainDisplayStore.BarGraph:
                    this.UpdateDisplayMenuButton(Define.E_MainDisplayStore.BarGraph);
                    this.MainBarGraph.DisplayRefresh(this.ParentForm.CurrentSystemStatus);
                    this.MainWeightBigScreen.DisplayRefresh(this.ParentForm.CurrentSystemStatus);
                    this.MainBarGraph.BringToFront();
                    this.MainWeightBigScreen.BringToFront();
                    break;
                case Define.E_MainDisplayStore.LineGraph:
                    this.UpdateDisplayMenuButton(Define.E_MainDisplayStore.LineGraph);
                    this.MainLineGraph.DisplayRefresh(this.ParentForm.CurrentSystemStatus);
                    this.MainWeightBigScreen.DisplayRefresh(this.ParentForm.CurrentSystemStatus);
                    this.MainLineGraph.BringToFront();
                    this.MainWeightBigScreen.BringToFront();
                    break;
                case Define.E_MainDisplayStore.List:
                    this.UpdateDisplayMenuButton(Define.E_MainDisplayStore.List);
                    this.MainList.DisplayRefresh(this.ParentForm.CurrentSystemStatus);
                    this.MainWeightSmall.DisplayRefresh(this.ParentForm.CurrentSystemStatus);
                    this.MainList.BringToFront();
                    this.MainWeightSmall.BringToFront();
                    break;
                case Define.E_MainDisplayStore.DataStat:
                    this.UpdateDisplayMenuButton(Define.E_MainDisplayStore.DataStat);
                    this.MainDataStatistics.DisplayRefresh(this.ParentForm.CurrentSystemStatus);
                    this.MainWeightBigScreen.DisplayRefresh(this.ParentForm.CurrentSystemStatus);
                    this.MainDataStatistics.BringToFront();
                    this.MainWeightBigScreen.BringToFront();
                    break;
                case Define.E_MainDisplayStore.Feedback:
                    this.UpdateDisplayMenuButton(Define.E_MainDisplayStore.Feedback);
                    this.MainFeedback.DisplayRefresh(this.ParentForm.CurrentSystemStatus);
                    this.MainWeightBigScreen.DisplayRefresh(this.ParentForm.CurrentSystemStatus);
                    this.MainFeedback.BringToFront();
                    this.MainWeightBigScreen.BringToFront();
                    break;
                case Define.E_MainDisplayStore.Modbus:
                    this.ParentForm.Update30000ModbusItem();
                    this.UpdateDisplayMenuButton(Define.E_MainDisplayStore.Modbus);
                    this.MainModbus.DisplayRefresh(this.ParentForm.CurrentSystemStatus);
                    this.MainModbus.BringToFront();
                    this.MainWeightSmall.BringToFront();
                    break;
                default:
                    break;
            }
        }

        public void TimerServer(bool value)
        {
            if (value == false)
            {
                if (this.timerServerIcon.Enabled == true)
                    this.timerServerIcon.Enabled = false;
            }
            else
            {
                if (this.timerServerIcon.Enabled == false)
                    this.timerServerIcon.Enabled = true;
            }
        }
        public void UpdateTimeDisplay()
        {
            this.labelTime.Text = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");        
        }

        public void DisplayRefresh(SystemStatus status)
        {
            string feedbackValue = "";
            int value;

            this.ParentForm.CurrentSystemStatus.CurrentDisplay = Define.E_DisplayStore.MainDisplay;
            this.ParentForm.SetDisplayMode(Define.E_DisplayMode.Normal);

            #region 순서변경 금지(품번 중량 변경)
            this.ParentForm.TransferCurrentProductItem(this.ParentForm.CurrentProductItem);
            this.RescaleControl(this.ParentForm.CurrentProductItem);
            this.UpdateMainTitleDisplay(this.ParentForm.CurrentProductItem);
            //this.SendCommProductChange(this.ParentForm.SystemConfig1.ProductNumber);
            #endregion

            // Log - smartFile Close
            this.ParentForm.ChildFormMenu.FileClose();
            this.buttonPrint.Visible = this.ParentForm.SystemConfig1.IsPrinterEnable;

            if (this.ParentForm.SystemConfig1.IsPrintPerProductEnable == true)
                this.buttonPrint.ButtonDown();
            else
                this.buttonPrint.ButtonUp();

            if (int.Parse(this.ParentForm.CurrentSystemParameter1.EquipmentType) == 4)
            {
                this.buttonConveyorUpDown.Visible = true;
                this.buttonConveyorUpDown.ButtonUp();
            }
            else
                this.buttonConveyorUpDown.Visible = false;

            this.UpdateDisplayUser(status);

            if (this.CurrentDisplay == Define.E_MainDisplayStore.Feedback)
            {
                if (this.buttonFeedback.Visible == false)
                    this.CurrentDisplay = Define.E_MainDisplayStore.BarGraph;
            }
            if (this.CurrentDisplay == Define.E_MainDisplayStore.Modbus)
            {
                if (this.buttonModbus.Visible == false)
                    this.CurrentDisplay = Define.E_MainDisplayStore.BarGraph;
            }

            this.DisplayBottomMain(this.CurrentDisplay);

            //this.CurrentDisplay = Define.E_MainDisplayStore.DisplayStartBarGraph;
            //this.DisplayBottomMain(this.CurrentDisplay);
            this.MainWeightBigScreen.DisplayRefresh(status);
            this.MainWeightSmall.DisplayRefresh(status);
            //this.MainDisplayMenu.DisplayRefresh(status);
            //this.MainDisplayStart.DisplayRefresh(status);
            //this.MainDisplayFeedback.DisplayRefresh(status);
            //this.MainDisplayStartGraph.DisplayRefresh(status);
        }
        #endregion

        #region Override Member
        protected override void OnLoad(EventArgs e)
        {
            base.OnLoad(e);

            //this.InitializeDesign();
            //this.DefaultSetting();

            //this.smartMemory1.ParentWindow = this;
            //this.smartMemory1.MemoryStatusInfomationShow(SmartX.SmartMemory.VIEWPOSITION.CENTER);
        }
        #endregion

        #region Event Handler
        private void buttonZero_Click(object sender, EventArgs e)
        {
            // Automatic Logout Reset
            if (this.ParentForm.SystemConfig3.IsPart11 == true)
                this.Part11AutomaticLogoutReset();

            this.ParentForm.SetTrackingHistoryData(Define.E_TrackingOperation.Zero, "");

            this.ParentForm.TransferData(CommunicationCommand.Zero, CommunicationID.SubBoard1);
        }

        private void buttonProductNo_Click(object sender, EventArgs e)
        {
            string message = "";
            DialogFormNumKeyPad myKeyPad = new DialogFormNumKeyPad(this.buttonProductNo.Text, 4, 0, false, this.ParentForm.SystemConfig1.Language);

            // Automatic Logout Reset
            if (this.ParentForm.SystemConfig3.IsPart11 == true)
                this.Part11AutomaticLogoutReset();

            if (myKeyPad.ShowDialog() == DialogResult.OK)
            {
                if (myKeyPad.doubleValue < 1 || myKeyPad.doubleValue > this.ParentForm.ProductCount)
                {
                    // 입력범위를 확인하세요
                    message = string.Format("1 ~ {0}", this.ParentForm.ProductCount);
                    DialogFormMessage myMsg = new DialogFormMessage(1, this.ParentForm.SystemConfig1.Language, message);
                    myMsg.ShowDialog();
                }
                else
                {
                    this.ParentForm.ClearAlarm(0);
                    this.ProductChange(myKeyPad.IntValue);
                }
            }
        }
        private void labelProductName_Click(object sender, EventArgs e)
        {
            int listIndex = 0, listViewIndex = 0;
            Collection<string> productNames = new Collection<string>();

            // Automatic Logout Reset
            if (this.ParentForm.SystemConfig3.IsPart11 == true)
                this.Part11AutomaticLogoutReset();

            this.ParentForm.LoadProductName(ref productNames);

            listIndex = this.ParentForm.SystemConfig1.ProductNumber - 1;
            listViewIndex = (listIndex / 10) * 10;
            if (listViewIndex > this.ParentForm.ProductCount - 10)
                listViewIndex = this.ParentForm.ProductCount - 10;

            DialogFormProductList product = new DialogFormProductList(productNames, listViewIndex);
            product.Location = new Point(79, 60);

            if (product.ShowDialog() == DialogResult.OK)
            {
                this.ParentForm.ClearAlarm(0);
                this.ProductChange(product.SelectedProductNumber);
            }
        }

        private void pictureBoxStart_Click(object sender, EventArgs e)
        {
            // Automatic Logout Reset
            if (this.ParentForm.SystemConfig3.IsPart11 == true)
                this.Part11AutomaticLogoutReset();

            this.ParentForm.TransferData(CommunicationCommand.Stop, CommunicationID.MainBoard);
        }
        private void pictureBoxStop_Click(object sender, EventArgs e)
        {
            // Automatic Logout Reset
            if (this.ParentForm.SystemConfig3.IsPart11 == true)
                this.Part11AutomaticLogoutReset();

            this.ParentForm.TransferData(CommunicationCommand.Start, CommunicationID.MainBoard);
        }

        private void timerPrinting_Tick(object sender, EventArgs e)
        {
            //this.timerPrinting.Enabled = false;
            //this.buttonPrint.Enabled = true;
            //this.buttonClear.Enabled = true;
        }
        private void timerServerIcon_Tick(object sender, EventArgs e)
        {
            if (this.ParentForm.smartTCPMultiServer.IsStart == true)
            {
                if (this.ParentForm.smartTCPMultiServer.ClientInfoList == null)
                {
                    this.UpdateEthernetStatusDisplay(false);
                }
                else
                {
                    this.UpdateEthernetStatusDisplay(true);
                }
            }
        }

        private void pictureBoxIconAlarm_Click(object sender, EventArgs e)
        {
            // Automatic Logout Reset
            if (this.ParentForm.SystemConfig3.IsPart11 == true)
                this.Part11AutomaticLogoutReset();

            if (this.MainAlarm.Visible == true)
            {
                this.MainAlarm.Visible = false;
            }
            else
            {
                this.MainAlarm.BringToFront();
                this.MainAlarm.Visible = true;
            }

            this.ParentForm.TransferData(CommunicationCommand.LampOnContinuousDisable, CommunicationID.MainBoard);
            this.ParentForm.TransferData(CommunicationCommand.BuzzerOnContinuousDisable, CommunicationID.MainBoard);
        }
        private void labelSorterAlarm_Click(object sender, EventArgs e)
        {
            // Automatic Logout Reset
            if (this.ParentForm.SystemConfig3.IsPart11 == true)
                this.Part11AutomaticLogoutReset();

            this.ParentForm.TransferData(CommunicationCommand.AlarmNgClearSorter, CommunicationID.MainBoard);
            if (this.ParentForm.IsLampOnDataSend == true)
                this.ParentForm.TransferData(CommunicationCommand.LampOnContinuousDisable, CommunicationID.MainBoard);
            if (this.ParentForm.IsBuzzerOnDataSend == true)
                this.ParentForm.TransferData(CommunicationCommand.BuzzerOnContinuousDisable, CommunicationID.MainBoard);
            this.labelSorterAlarm.Visible = false;
        }
        private void labelAlarmWindow_Click(object sender, EventArgs e)
        {
            // Automatic Logout Reset
            if (this.ParentForm.SystemConfig3.IsPart11 == true)
                this.Part11AutomaticLogoutReset();

            this.ParentForm.TransferData(CommunicationCommand.LampOnContinuousDisable, CommunicationID.MainBoard);
            this.ParentForm.TransferData(CommunicationCommand.BuzzerOnContinuousDisable, CommunicationID.MainBoard);

            this.PopUpWarningClose();
        }

        private void buttonPrint_Click(object sender, EventArgs e)
        {
            // Automatic Logout Reset
            if (this.ParentForm.SystemConfig3.IsPart11 == true)
                this.Part11AutomaticLogoutReset();

            if (this.buttonPrint.ButtonStatus == SmartButton.BUTSTATUS.DOWN)
            {
                this.ParentForm.SystemConfig1.IsPrintPerProductEnable = true;
                this.ParentForm.PrintingHeadLine();
            }
            else
            {
                this.ParentForm.SystemConfig1.IsPrintPerProductEnable = false;

                if (this.ParentForm.SystemConfig1.SerialCOM1Mode == 3)
                    this.ParentForm.TransferSerialCOM1("\n\n\n\n");
                else if (this.ParentForm.SystemConfig1.SerialCOM3Mode == 3)
                    this.ParentForm.TransferSerialCOM3("\n\n\n\n");
                else if (this.ParentForm.SystemConfig1.SerialCOM4Mode == 3)
                    this.ParentForm.TransferSerialCOM4("\n\n\n\n");
            }

            this.ParentForm.SaveSystemConfigurationFile1(this.ParentForm.SystemConfig1);

            //this.buttonPrint.Enabled = false;
            //this.buttonClear.Enabled = false;
            //this.timerPrinting.Interval = 10000;
            //this.timerPrinting.Enabled = true;

            //this.ParentForm.PrintingWeight(this.ParentForm.CurrentWeightData, this.ParentForm.CurrentProductItem);
        }
        private void buttonClear_Click(object sender, EventArgs e)
        {
            // Automatic Logout Reset
            if (this.ParentForm.SystemConfig3.IsPart11 == true)
                this.Part11AutomaticLogoutReset();

            this.ParentForm.SetTrackingHistoryData(Define.E_TrackingOperation.Clear, "");

            if (this.ParentForm.CurrentWeightData.TotalCount == 0 && this.ParentForm.SystemConfig1.IsBarcodeEnable == true)
            {
                #region 바코드 사용 시 전체 품목 데이터 소거
                DialogFormYesNo myDlg = new DialogFormYesNo(this.ParentForm.SystemConfig1.Language, 19);
                if (myDlg.ShowDialog() == DialogResult.Yes)
                {
                    SmartSplash splash = new SmartSplash();
                    splash.CenterPosition = true;
                    splash.AnimationInterval = 200;
                    splash.LoadingImagePathname = "SmartLoading4";
                    splash.Start();

                    this.ClearAllData();

                    this.ParentForm.CurrentBarcode.Clear();
                    this.UpdateBarcodeDisplay(this.ParentForm.CurrentBarcode);

                    splash.Finish();
                }
                #endregion
            }
            else
            {
                #region 현재 품목 데이터 소거
                DialogFormYesNo myDlg = new DialogFormYesNo(this.ParentForm.SystemConfig1.Language, 8);
                if (myDlg.ShowDialog() == DialogResult.Yes)
                {
                    this.ParentForm.ClearQueue();

                    this.ClearCurrentData();
                    this.ParentForm.TransferData(CommunicationCommand.Clear, CommunicationID.SubBoard1);

                    if (this.ParentForm.SystemConfig1.IsBarcodeEnable == true)
                    {
                        this.ParentForm.CurrentBarcode.Clear();
                        this.UpdateBarcodeDisplay(this.ParentForm.CurrentBarcode);
                    }
                }
                #endregion
            }
        }
        private void buttonUser_Click(object sender, EventArgs e)
        {
            // 인테크 : Intech / I20090810!
            // 관리자 : admin00 / admin12!

            // Automatic Logout Reset
            if (this.ParentForm.SystemConfig3.IsPart11 == true)
                this.Part11AutomaticLogoutReset();

            if (this.ParentForm.CurrentSystemStatus.CurrentUser.Group == Define.E_UserGroup.LogOut)
            {
                this.Login();
            }
            else
            {
                DialogFormYesNo msg = new DialogFormYesNo(this.ParentForm.SystemConfig1.Language, 12);
                if (msg.ShowDialog() == DialogResult.Yes)
                {
                    this.Logout();
                }
            }
        }
        private void buttonWeightInputMode_Click(object sender, EventArgs e)
        {
            // Automatic Logout Reset
            if (this.ParentForm.SystemConfig3.IsPart11 == true)
                this.Part11AutomaticLogoutReset();

            if (this.buttonWeightInputMode.ButtonStatus == SmartX.SmartButton.BUTSTATUS.DOWN)
                this.ParentForm.CurrentSystemStatus.CurrentWeightInputMode = Define.E_WeightInputMode.Deviation;
            else
                this.ParentForm.CurrentSystemStatus.CurrentWeightInputMode = Define.E_WeightInputMode.Weight;

            this.UpdateCurrentProductDisplay(this.ParentForm.CurrentSystemStatus.Equipment, this.ParentForm.CurrentProductItem, this.ParentForm.CurrentWeightData);
        }
        private void buttonConveyorUpDown_Click(object sender, EventArgs e)
        {
            // Automatic Logout Reset
            if (this.ParentForm.SystemConfig3.IsPart11 == true)
                this.Part11AutomaticLogoutReset();

            if (this.buttonConveyorUpDown.ButtonStatus == SmartX.SmartButton.BUTSTATUS.DOWN)
                this.ParentForm.TransferData(CommunicationCommand.MotorDown, CommunicationID.MainBoard);
            else
                this.ParentForm.TransferData(CommunicationCommand.MotorUp, CommunicationID.MainBoard);
        }
        private void buttonHiddenMenu_Click(object sender, EventArgs e)
        {
            // Automatic Logout Reset
            if (this.ParentForm.SystemConfig3.IsPart11 == true)
                this.Part11AutomaticLogoutReset();

            this.ParentForm.ChildFormMenu.DisplayHiddenMenu(this.ParentForm.CurrentSystemStatus.CurrentDisplay, this.ParentForm.SystemConfig1);
        }
        private void buttonMenu_Click(object sender, EventArgs e)
        {
            // Automatic Logout Reset
            if (this.ParentForm.SystemConfig3.IsPart11 == true)
                this.Part11AutomaticLogoutReset();

            if (this.ParentForm.CurrentSystemStatus.Equipment == Define.E_EquipmentStatus.Stop)
            {
                // Automatic Logout
                if (this.ParentForm.SystemConfig3.IsPart11 == true)
                    UserManager.UserManager_AutoLogoutTimeoutPause();

                this.ParentForm.ChildFormMenu.DisplayRefresh(this.ParentForm.CurrentSystemStatus);
                ((FormMain)(Owner)).smartForm.Show((int)Define.E_FormStore.FormMenu);
            }
        }

        private void buttonStop_Click(object sender, EventArgs e)
        {
            // Automatic Logout Reset
            if (this.ParentForm.SystemConfig3.IsPart11 == true)
                this.Part11AutomaticLogoutReset();

            this.CurrentDisplay = Define.E_MainDisplayStore.BarGraph;

            this.DisplayBottomMain(this.CurrentDisplay);
        }
        private void buttonBargraph_Click(object sender, EventArgs e)
        {
            // Automatic Logout Reset
            if (this.ParentForm.SystemConfig3.IsPart11 == true)
                this.Part11AutomaticLogoutReset();

            this.CurrentDisplay = Define.E_MainDisplayStore.BarGraph;

            this.DisplayBottomMain(this.CurrentDisplay);
        }
        private void buttonLinegraph_Click(object sender, EventArgs e)
        {
            // Automatic Logout Reset
            if (this.ParentForm.SystemConfig3.IsPart11 == true)
                this.Part11AutomaticLogoutReset();

            this.CurrentDisplay = Define.E_MainDisplayStore.LineGraph;

            this.DisplayBottomMain(this.CurrentDisplay);
        }
        private void buttonList_Click(object sender, EventArgs e)
        {
            // Automatic Logout Reset
            if (this.ParentForm.SystemConfig3.IsPart11 == true)
                this.Part11AutomaticLogoutReset();

            this.CurrentDisplay = Define.E_MainDisplayStore.List;

            this.DisplayBottomMain(this.CurrentDisplay);
        }
        private void buttonDataStat_Click(object sender, EventArgs e)
        {
            // Automatic Logout Reset
            if (this.ParentForm.SystemConfig3.IsPart11 == true)
                this.Part11AutomaticLogoutReset();

            this.CurrentDisplay = Define.E_MainDisplayStore.DataStat;

            this.DisplayBottomMain(this.CurrentDisplay);
        }
        private void buttonStartMenu_Click(object sender, EventArgs e)
        {
            // Automatic Logout Reset
            if (this.ParentForm.SystemConfig3.IsPart11 == true)
                this.Part11AutomaticLogoutReset();

            this.CurrentDisplay = Define.E_MainDisplayStore.SubMenu;

            this.DisplayBottomMain(this.CurrentDisplay);
        }
        private void buttonFeedback_Click(object sender, EventArgs e)
        {
            // Automatic Logout Reset
            if (this.ParentForm.SystemConfig3.IsPart11 == true)
                this.Part11AutomaticLogoutReset();

            this.CurrentDisplay = Define.E_MainDisplayStore.Feedback;

            this.DisplayBottomMain(this.CurrentDisplay);
        }
        private void buttonModbus_Click(object sender, EventArgs e)
        {
            // Automatic Logout Reset
            if (this.ParentForm.SystemConfig3.IsPart11 == true)
                this.Part11AutomaticLogoutReset();

            this.CurrentDisplay = Define.E_MainDisplayStore.Modbus;

            this.DisplayBottomMain(this.CurrentDisplay);
        }
        #endregion

        private void buttonExit_Click(object sender, EventArgs e)
        {
            this.ParentForm.CloseSmartSerialPort2();
            this.ParentForm.smartFileCommunicationLog.Close();
            this.ParentForm.smartFileCheckLog.Close();
            this.ParentForm.Close();
        }
        private void buttonMemory_Click(object sender, EventArgs e)
        {
            this.smartMemory1.ParentWindow = this;
            this.smartMemory1.MemoryStatusInfomationShow(SmartX.SmartMemory.VIEWPOSITION.CENTER);
        }
    }
}