public UC_StatusRectangleLayout()
        {
            InitializeComponent();

            _proposedSize  = new System.Drawing.Size(int.MaxValue, int.MaxValue);

            _switchPen.DashStyle = System.Drawing.Drawing2D.DashStyle.Dash;
            //Ĭ�ϱ����ɫ
            this.DefaultStyle.BoardColor = Color.Black;
            //Ĭ�ϱ�����ɫ
            this.DefaultStyle.BackColor = Color.Black;
            this.DefaultStyle.BoardWidth = 1;
            //Ĭ������
            this.DefaultFocusStyle.GridFont = new Font("����", 12, FontStyle.Regular);

            _screenBoarderPen = new Pen(Color.SpringGreen, 2.0f);

            _curMonitorConfigInfo = new MonitorConfigData();
        }
        public UC_ComplexScreenLayout()
        {
            InitializeComponent();

            _allScanBoardMonitorDataIsValid = false;
            _curMonitorConfigInfo = new MonitorConfigData();
            _curTempMaxMinIndexInfo = new MaxMinInfoIndex();
            _curHumiMaxMinIndexInfo = new MaxMinInfoIndex();

            _curAllScanBoardMonitorInfList = new List<SBInfoAndMonitorInfo>();

            dbfDataGridView_ComplexScreenInfo.ReadOnly = true;
            dbfDataGridView_ComplexScreenInfo.RowHeadersVisible = false;
            dbfDataGridView_ComplexScreenInfo.AllowUserToAddRows = false;
            dbfDataGridView_ComplexScreenInfo.AllowUserToDeleteRows = false;
            dbfDataGridView_ComplexScreenInfo.AllowUserToOrderColumns = false;
            dbfDataGridView_ComplexScreenInfo.AllowUserToResizeRows = false;
            dbfDataGridView_ComplexScreenInfo.AllowUserToResizeColumns = false;
            InitDataGridViewCols();
            CurCtrlSystemMode = _curCtrlSystemMode;
        }
        /// <summary>
        /// ��ʾ��������ݹ���ؼ�  --- ��������List<ILEDDisplayInfo>�仯ΪDictionary<string, List<ILEDDisplayInfo>>��
        ///                             keyֵΪ�������ƣ����Ҹ�������Ϣʵ��Ϊ��Ҫ��ص�������Ϣ
        /// </summary>
        public MarsScreenMonitorDataViewer()
        {
            InitializeComponent();
            CurrentFont = this.Font;
            _customToolTipFont = this.Font;
            _complexScreenFont = this.Font;
            _simpleOrStandardScreenFont = this.Font;
            _needUpdateFont = this.Font;

            _updateMonitorDataForNotUpdateDic = new Dictionary<string, Dictionary<string, ScannerMonitorData>>();
            CompeleteConfigScanBoardDisplayEvent += new EventHandler(MarsScreenMonitorDataViewer_CompeleteConfigScanBoardDisplayEvent);

            _curMonitorConfigInfo = new MonitorConfigData();
            _curAllLedScreenRectDic = new Dictionary<string, List<ScreenGridBindObj>>();
            //_physicalScreenInfo = new PhysicalDisplayInfo();
            _curTempMaxMinKeyInfo = new TempAndHumiInfo();
            _curHumiMaxMinKeyInfo = new TempAndHumiInfo();
            _tempStatisInfo = new TempAndHumiStatisticsInfo();
            _humiStatisInfo = new TempAndHumiStatisticsInfo();
            _curOperateStep = OperateStep.None;

            _indicator.BackColor = Color.White;
            _indicator.CircleColor = Color.Blue;
            _indicator.AnimationSpeed = 50;

            #region ��ʼ������ؼ�
            _complexScreenLayout = new UC_ComplexScreenLayout();
            _complexScreenLayout.Parent = panel_Display;
            _complexScreenLayout.Dock = DockStyle.Fill;
            _complexScreenLayout.ClearAllMonitorInfo();
            _complexScreenLayout.CurType = _curType;

            _statusRectangleLayout = new UC_StatusRectangleLayout();
            _statusRectangleLayout.DefaultFocusStyle.BackColor = Color.White;
            _statusRectangleLayout.DefaultFocusStyle.BoardColor = Color.Yellow;
            _statusRectangleLayout.IsCanSelect = false;
            _statusRectangleLayout.Parent = panel_Display;
            _statusRectangleLayout.Dock = DockStyle.Fill;
            //_statusRectangleLayout.BorderStyle = BorderStyle.FixedSingle;
            _statusRectangleLayout.BackColor = Color.Transparent;
            _statusRectangleLayout.ClearAllRectangularGrid();
            _statusRectangleLayout.CurType = _curType;

            _sbStatusInfoUC = new UC_StatusInfo(CommonStaticValue.SBStatusDisplayStr[0],
                                                CommonStaticValue.SBStatusDisplayStr[1],
                                                CommonStaticValue.SBStatusDisplayStr[2]);
            _sbStatusInfoUC.Parent = panel_Info;
            _sbStatusInfoUC.Dock = DockStyle.Fill;

            _fanInfoUC = new UC_SmokeFanPowerInfo(CommonStaticValue.FanDisplayStr[0], CommonStaticValue.FanDisplayStr[1]);
            _fanInfoUC.Parent = panel_Info;
            _fanInfoUC.Dock = DockStyle.Fill;

            _powerInfoUC = new UC_SmokeFanPowerInfo(CommonStaticValue.PowerDisplayStr[0], CommonStaticValue.PowerDisplayStr[1]);
            _powerInfoUC.Parent = panel_Info;
            _powerInfoUC.Dock = DockStyle.Fill;

            _smokeInfo = new UC_SmokeFanPowerInfo(CommonStaticValue.SmokeDisplayStr[0], CommonStaticValue.SmokeDisplayStr[1]);
            _smokeInfo.Parent = panel_Info;
            _smokeInfo.Dock = DockStyle.Fill;

            _tempInfoUC = new UC_TempAndHumiInfo(CommonStaticValue.TemperatureDisplayStr[0], CommonStaticValue.TemperatureDisplayStr[1],
                                                 CommonStaticValue.TemperatureDisplayStr[2], CommonStaticValue.TemperatureDisplayStr[3],
                                                 CommonStaticValue.TemperatureDisplayStr[4], CommonStaticValue.CelsiusUnit,
                                                 new ClickMaxMinValueEventHandler(ClickTempMaxMinValue));
            _tempInfoUC.Parent = panel_Info;
            _tempInfoUC.Dock = DockStyle.Fill;

            _humidityInfoUC = new UC_TempAndHumiInfo(CommonStaticValue.HumidityDisplayStr[0], CommonStaticValue.HumidityDisplayStr[1],
                                                     CommonStaticValue.HumidityDisplayStr[2], CommonStaticValue.HumidityDisplayStr[3],
                                                     CommonStaticValue.HumidityDisplayStr[4], CommonStaticValue.HUMIDITY_UNIT,
                                                     new ClickMaxMinValueEventHandler(ClickHumiMaxMinValue));
            _humidityInfoUC.Parent = panel_Info;
            _humidityInfoUC.Dock = DockStyle.Fill;

            _rowLineInfoUC = new UC_RowLineCabinetDoorInfo(CommonStaticValue.RowLineStr[0], CommonStaticValue.RowLineStr[1]);
            _rowLineInfoUC.Parent = panel_Info;
            _rowLineInfoUC.Dock = DockStyle.Fill;

            _mcStatusInfoUC = new UC_StatusInfo(CommonStaticValue.MCStatusDisplayStr[0],
                                                CommonStaticValue.MCStatusDisplayStr[1],
                                                CommonStaticValue.MCStatusDisplayStr[2]);
            _mcStatusInfoUC.Parent = panel_Info;
            _mcStatusInfoUC.Dock = DockStyle.Fill;

            _generalStatuInfoUC = new UC_RowLineCabinetDoorInfo(CommonStaticValue.GeneralStatusStr[0], CommonStaticValue.GeneralStatusStr[1]);
            _generalStatuInfoUC.Parent = panel_Info;
            _generalStatuInfoUC.Dock = DockStyle.Fill;

            _tempCorNoticeUC = new UC_TempAndHumidityCorNotice(MinTempValue, _curMonitorConfigInfo.TempAlarmThreshold,
                                                               MaxTempValue, CommonStaticValue.CelsiusUnit);
            _tempCorNoticeUC.Parent = panel_ColorMotice;
            _tempCorNoticeUC.Dock = DockStyle.Fill;

            _humidityCorNoticeUC = new UC_TempAndHumidityCorNotice(MinHumidityValue, _curMonitorConfigInfo.HumiAlarmThreshold,
                                                                   MaxHumidityValue, CommonStaticValue.HUMIDITY_UNIT);
            _humidityCorNoticeUC.Parent = panel_ColorMotice;
            _humidityCorNoticeUC.Dock = DockStyle.Fill;

            _sbStatusCorNotice = new UC_StatusCorNotice();
            _sbStatusCorNotice.Parent = panel_ColorMotice;
            _sbStatusCorNotice.Dock = DockStyle.Fill;

            _mcStatusCorNotice = new UC_StatusCorNotice();
            _mcStatusCorNotice.Parent = panel_ColorMotice;
            _mcStatusCorNotice.Dock = DockStyle.Fill;

            _smokeOrPowerCorNotice = new UC_SmokeFanPowerCorNotice(MonitorDisplayType.Smoke);
            _smokeOrPowerCorNotice.Parent = panel_ColorMotice;
            _smokeOrPowerCorNotice.Dock = DockStyle.Fill;

            _fanCorNotice = new UC_SmokeFanPowerCorNotice(MonitorDisplayType.Fan);
            _fanCorNotice.Parent = panel_ColorMotice;
            _fanCorNotice.Dock = DockStyle.Fill;

            _rowLineCorNotice = new UC_RowLineCorNotice();
            _rowLineCorNotice.Parent = panel_ColorMotice;
            _rowLineCorNotice.Dock = DockStyle.Fill;

            _generalStatusCorNotice = new UC_SmokeFanPowerCorNotice(MonitorDisplayType.GeneralSwitch);
            _generalStatusCorNotice.Parent = panel_ColorMotice;
            _generalStatusCorNotice.Dock = DockStyle.Fill;

            _statusRectangleLayout.GridMouseDoubleClick += new RectangularGridMouseEventHandler(StatusRectangleLayout_GridMouseDoubleClick);
            _statusRectangleLayout.GridMouseMove += new RectangularGridMouseEventHandler(StatusRectangleLayout_GridMouseMove);
            #endregion

            this.Disposed += new EventHandler(MarsScreenMonitorDataViewer_Disposed);
            vScrollBar_PixelLength.Value = (int)(DefaultLengthOnePixel * 100);
            vScrollBar_PixelLength_Scroll(null, null);

            _isNeedSetScaleRatio = false;
            _isHasValidMonitorInfo = false;
            //���ý����ϲ�ͬ��ʾ���Ϳؼ�������
            SetDisplayTypeControl();
            this.CurCtrlSystemMode = _curCtrlSystemMode;
        }
        private MonitorConfigData SetMonitorConfigData(string sn)
        {
            MonitorConfigData monitorConfigData = new MonitorConfigData();
            LedAlarmConfig ledAlarm = MonitorAllConfig.Instance().LedAlarmConfigs.Find(a => a.SN == sn);
            if (ledAlarm==null || ledAlarm.ParameterAlarmConfigList == null || ledAlarm.ParameterAlarmConfigList.Count == 0)
            {
                return monitorConfigData;
            }
            foreach (ParameterAlarmConfig param in ledAlarm.ParameterAlarmConfigList)
            {
                if (param != null)
                {
                    switch (param.ParameterType)
                    {
                        case StateQuantityType.Temperature:
                            monitorConfigData.TempAlarmThreshold = (float)param.HighThreshold;
                            break;
                        case StateQuantityType.Humidity:
                            monitorConfigData.HumiAlarmThreshold = (float)param.HighThreshold;
                            break;
                        case StateQuantityType.Voltage:
                            if (param.Level == AlarmLevel.Warning)
                            {
                                monitorConfigData.PowerAlarmValue = (float)param.LowThreshold;
                            }
                            else if (param.Level == AlarmLevel.Malfunction)
                            {
                                monitorConfigData.PowerFaultValue = (float)param.HighThreshold;
                            }
                            break;
                        case StateQuantityType.FanSpeed:
                            monitorConfigData.FanSpeed = (float)param.LowThreshold;
                            break;
                    }
                }
            }

            LedMonitoringConfig ledMonitorCfg = MonitorAllConfig.Instance().LedMonitorConfigs.Find(a => a.SN == sn);
            if (ledMonitorCfg == null || ledMonitorCfg.MonitoringCardConfig == null || ledMonitorCfg.SN == null)
            {
                return monitorConfigData;
            }
            if (ledMonitorCfg.MonitoringCardConfig.ParameterConfigTable == null || ledMonitorCfg.MonitoringCardConfig.ParameterConfigTable.Count == 0)
            {
                return monitorConfigData;
            }
            ParameterMonitoringConfig cfg = ledMonitorCfg.MonitoringCardConfig.ParameterConfigTable.Find(a => a.Type.Equals(StateQuantityType.FanSpeed));
            monitorConfigData.MCFanInfo = new ScannerStatusDisplay.ScanBdMonitoredParamUpdateInfo();
            if (cfg != null && cfg.MonitoringEnable)
            {
                if (cfg.ConfigMode == ParameterConfigMode.GeneralExtendedMode)
                {
                    monitorConfigData.MCFanInfo.CountType =
                        Nova.Monitoring.UI.ScannerStatusDisplay.ScanBdMonitoredParamCountType.SameForEachScanBd;
                    monitorConfigData.MCFanInfo.AlarmThreshold = (int)monitorConfigData.FanSpeed;
                    monitorConfigData.MCFanInfo.SameCount = (byte)cfg.GeneralExtendedConfig;
                }
                else if (cfg.ConfigMode == ParameterConfigMode.AdvanceExtendedMode)
                {
                    monitorConfigData.MCFanInfo.CountType =
                        Nova.Monitoring.UI.ScannerStatusDisplay.ScanBdMonitoredParamCountType.DifferentForEachScanBd;
                    monitorConfigData.MCFanInfo.AlarmThreshold = (int)monitorConfigData.FanSpeed;
                    monitorConfigData.MCFanInfo.CountDicOfScanBd = new SerializableDictionary<string, byte>();
                    foreach (ParameterExtendedConfig param in cfg.ExtendedConfig)
                    {
                        monitorConfigData.MCFanInfo.CountDicOfScanBd.Add(param.ReceiveCardId, (byte)param.ParameterCount);
                    }
                }
            }
            cfg = ledMonitorCfg.MonitoringCardConfig.ParameterConfigTable.Find(a => a.Type.Equals(StateQuantityType.Voltage));
            monitorConfigData.MCPowerInfo = new ScannerStatusDisplay.ScanBdMonitoredPowerInfo();
            if (cfg != null)
            {
                if (cfg != null && cfg.MonitoringEnable)
                {
                    if (cfg.ConfigMode == ParameterConfigMode.GeneralExtendedMode)
                    {
                        monitorConfigData.MCPowerInfo.CountType =
                            Nova.Monitoring.UI.ScannerStatusDisplay.ScanBdMonitoredParamCountType.SameForEachScanBd;
                        monitorConfigData.MCPowerInfo.SameCount = (byte)cfg.GeneralExtendedConfig;
                        monitorConfigData.MCPowerInfo.AlarmThreshold = monitorConfigData.PowerAlarmValue;
                        monitorConfigData.MCPowerInfo.FaultThreshold = monitorConfigData.PowerFaultValue;
                    }
                    else if (cfg.ConfigMode == ParameterConfigMode.AdvanceExtendedMode)
                    {
                        monitorConfigData.MCPowerInfo.CountType =
                            Nova.Monitoring.UI.ScannerStatusDisplay.ScanBdMonitoredParamCountType.DifferentForEachScanBd;
                        monitorConfigData.MCPowerInfo.AlarmThreshold = monitorConfigData.PowerAlarmValue;
                        monitorConfigData.MCPowerInfo.FaultThreshold = monitorConfigData.PowerFaultValue;
                        monitorConfigData.MCPowerInfo.CountDicOfScanBd = new SerializableDictionary<string, byte>();
                        foreach (ParameterExtendedConfig param in cfg.ExtendedConfig)
                        {
                            monitorConfigData.MCPowerInfo.CountDicOfScanBd.Add(param.ReceiveCardId, (byte)param.ParameterCount);
                        }
                    }
                }
            }
            return monitorConfigData;
        }
        private void Frm_MonitorDisplayMain_Load(object sender, EventArgs e)
        {
            _buttonList = new List<PopButton>();
            _buttonList.Add(popButton_Sender);
            _buttonList.Add(popButton_Scanner);
            _buttonList.Add(popButton_tem);
            _buttonList.Add(popButton_Monitor);
            _buttonList.Add(popButton_Hum);
            _buttonList.Add(popButton_Smoke);
            _buttonList.Add(popButton_Fan);
            _buttonList.Add(popButton_Power);
            _buttonList.Add(popButton_Cabinet);
            _buttonList.Add(popButton_Cabinet_Door);

            InitializeSender();
            _monitorConfigData = new MonitorConfigData();
            _leds = MonitorAllConfig.Instance().LedInfoList;
            _allCommDic = MonitorAllConfig.Instance().AllCommPortLedDisplayDic;
            if (_leds != null && _leds.Count != 0)
            {
                foreach (var led in _leds)
                {
                    string displayName = string.Empty;
                    if (string.IsNullOrEmpty(led.AliaName))
                    {
                        displayName = led.Commport + "-" + MonitorAllConfig.Instance().ScreenName +
                            (Convert.ToInt32(led.Sn.Split('-')[1], 16) + 1);
                    }
                    else
                    {
                        displayName = led.AliaName;
                    }
                    InitializeScanner(led.Sn, displayName, _allCommDic[led.Sn]);
                }
                Frm_MonitorDisplayMain_MonitorDataChangedEvent(null, null);
            }
        }