From d6fb0646531172f23648441c224cdcccd721b894 Mon Sep 17 00:00:00 2001
From: xm <1271024303@qq.com>
Date: 星期一, 14 十二月 2020 09:59:01 +0800
Subject: [PATCH] 请合并代码,完成晾衣架最终功能。

---
 ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Controls/CompoundControls/SafeguardLogControl.cs |  373 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 373 insertions(+), 0 deletions(-)

diff --git a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Controls/CompoundControls/SafeguardLogControl.cs b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Controls/CompoundControls/SafeguardLogControl.cs
new file mode 100755
index 0000000..e74e709
--- /dev/null
+++ b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Controls/CompoundControls/SafeguardLogControl.cs
@@ -0,0 +1,373 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace Shared.Phone.UserCenter
+{
+    /// <summary>
+    /// 瀹夐槻璁板綍鎺т欢
+    /// </summary>
+    public class SafeguardLogControl : FrameLayout
+    {
+        #region 鈻� 鍙橀噺澹版槑___________________________
+
+        /// <summary>
+        /// 浠婃棩鏃犱换浣曟姤璀﹁褰� 鐨勬帶浠�
+        /// </summary>
+        private NormalViewControl btnMsg = null;
+        /// <summary>
+        /// 鍚勯槻鍖虹殑妗屽竷鎺т欢
+        /// </summary>
+        private Dictionary<int, FrameLayout> dicFrame = new Dictionary<int, FrameLayout>();
+        /// <summary>
+        /// 鍚勯槻鍖虹殑琛屾帶浠�
+        /// </summary>
+        private Dictionary<int, List<FrameLayout>> dicRowFrame = new Dictionary<int, List<FrameLayout>>();
+        /// <summary>
+        /// 妗屽竷鎺т欢
+        /// </summary>
+        private FrameLayout frameTable = null;
+        /// <summary>
+        /// 寮�鏀捐繖涓帶浠跺嚭鏉�,鏈夌偣鐢�
+        /// </summary>
+        private NormalViewControl btnTime = null;
+
+        #endregion
+
+        #region 鈻� 鍒濆鍖朹____________________________
+
+        /// <summary>
+        /// 鍒濆鍖�
+        /// </summary>
+        public SafeguardLogControl()
+        {
+            this.Height = Application.GetRealHeight(260 + 44);
+        }
+
+        /// <summary>
+        /// 鍒濆鍖�
+        /// </summary>
+        /// <param name="dayText">鏃ユ湡</param>
+        /// <param name="dicInfo">闃插尯鎶ヨ淇℃伅</param>
+        public void InitControl(string dayText, Dictionary<int, List<SafeguardAlarmInfo>> dicInfo)
+        {
+            this.frameTable = new FrameLayout();
+            frameTable.Gravity = Gravity.CenterHorizontal;
+            frameTable.Radius = (uint)Application.GetRealHeight(17);
+            frameTable.Height= Application.GetRealHeight(260);
+            frameTable.Width = Application.GetRealWidth(968);
+            frameTable.BackgroundColor = UserCenterColor.Current.White;
+            this.AddChidren(frameTable);
+
+            //璁板綍鏃堕棿
+            this.btnTime = new NormalViewControl(300, 58, true);
+            btnTime.X = Application.GetRealWidth(35);
+            btnTime.Y = Application.GetRealHeight(29);
+            btnTime.TextColor = UserCenterColor.Current.TextGrayColor3;
+            btnTime.TextID = R.MyInternationalizationString.uRecordTime;
+            this.frameTable.AddChidren(btnTime);
+
+            //鏃ユ湡
+            string month = dayText.Substring(4, 2);
+            string day = dayText.Substring(6, 2);
+            var btnDay = new NormalViewControl(300, 58, true);
+            btnDay.X = frameTable.Width - Application.GetRealWidth(300 + 35);
+            btnDay.Y = btnTime.Y;
+            btnDay.TextColor = UserCenterColor.Current.TextColor2;
+            btnDay.TextAlignment = TextAlignment.CenterRight;
+            btnDay.Text = month + Language.StringByID(R.MyInternationalizationString.Month) + day + Language.StringByID(R.MyInternationalizationString.Day);
+            this.frameTable.AddChidren(btnDay);
+
+            //绾�
+            var btnLine = new NormalViewControl(Application.GetRealWidth(904), ControlCommonResourse.BottomLineHeight, false);
+            btnLine.X = Application.GetRealWidth(29);
+            btnLine.Y = Application.GetRealHeight(98);
+            btnLine.BackgroundColor = UserCenterColor.Current.ButtomLine;
+            this.frameTable.AddChidren(btnLine);
+
+            //棰勫垱寤轰簲澶ч槻鍖虹殑妗屽竷
+            var listId = new List<int>() { 1, 2, 4, 5, 3 };
+            int tempY = 0;
+            for (int i = 0; i < listId.Count; i++)
+            {
+                var frame1 = new FrameLayout();
+                frame1.Height = Application.GetRealHeight(10);
+                frame1.Y = tempY == 0 ? Application.GetRealHeight(98) : tempY;
+                this.frameTable.AddChidren(frame1);
+                dicFrame[listId[i]] = frame1;
+                dicRowFrame[listId[i]] = new List<FrameLayout>();
+
+                //鍒濆鍖栭槻鍖烘爣棰樻帶浠�
+                this.InitGarrisonTitleControl(listId[i]);
+
+                if (dicInfo != null && dicInfo.ContainsKey(listId[i]) == true && dicInfo[listId[i]].Count > 0)
+                {
+                    var listRow = dicRowFrame[listId[i]];
+                    foreach (var alarmInfo in dicInfo[listId[i]])
+                    {
+                        //涓�鏉′俊鎭噷闈紝瀹冨彲鑳藉寘鍚涓姤璀�
+                        var listMsg = HdlAlarmsLogic.Current.GetSensorListAlarmMsg(alarmInfo);
+                        foreach (var strMsg in listMsg)
+                        {
+                            //娣诲姞鎶ヨ淇℃伅鎺т欢
+                            var contr = this.AddAlarmInfoControl(alarmInfo, strMsg);
+                            if (listRow.Count != 0)
+                            {
+                                contr.Y = listRow[listRow.Count - 1].Bottom + Application.GetRealHeight(23);
+                            }
+                            listRow.Add(contr);
+                        }
+                    }
+                    //鍙樻洿楂樺害
+                    frame1.Height = listRow[listRow.Count - 1].Bottom + Application.GetRealHeight(55);
+                    this.frameTable.Height = frame1.Bottom;
+                    this.Height = frame1.Bottom + Application.GetRealHeight(44);
+                    tempY = frame1.Bottom;
+                }
+                else
+                {
+                    frame1.Visible = false;
+                }
+            }
+
+            if (dicInfo == null || dicInfo.Count == 0)
+            {
+                //浠婃棩鏃犱换浣曟姤璀﹁褰�
+                btnMsg = new NormalViewControl(frameTable.Width, Application.GetRealHeight(60), false);
+                btnMsg.Y = btnLine.Bottom + Application.GetRealHeight(28);
+                btnMsg.TextColor = UserCenterColor.Current.TextGrayColor3;
+                btnMsg.TextID = R.MyInternationalizationString.uNowDayNotHadAlarmLog;
+                btnMsg.TextAlignment = TextAlignment.Center;
+                this.frameTable.AddChidren(btnMsg);
+            }
+            //娣诲姞搴曢儴闃村奖鐗规晥
+            this.frameTable.SetViewShadow(true);
+        }
+
+        #endregion
+
+        #region 鈻� 鍒濆鍖栭槻鍖烘爣棰樻帶浠禵________________
+
+        /// <summary>
+        /// 鍒濆鍖栭槻鍖烘爣棰樻帶浠�
+        /// </summary>
+        /// <param name="zoneId"></param>
+        private void InitGarrisonTitleControl(int zoneId)
+        {
+            FrameLayout frame = dicFrame[zoneId];
+            //鍥炬爣
+            var btnIcon = new IconViewControl(69);
+            btnIcon.X = Application.GetRealWidth(29);
+            btnIcon.Y = Application.GetRealHeight(23);
+            //鍙細鏄�1~5
+            if (zoneId == 1 || zoneId == 2)
+            {
+                btnIcon.UnSelectedImagePath = "Safeguard/ProtectionAtHome.png";
+            }
+            else
+            {
+                btnIcon.UnSelectedImagePath = "Safeguard/ProtectionRemoveHome.png";
+            }
+            frame.AddChidren(btnIcon);
+            //闃插尯鍚�
+            var btnName = new NormalViewControl(400, 58, true);
+            btnName.X = Application.GetRealWidth(109);
+            btnName.Y = Application.GetRealHeight(35);
+            btnName.Text = HdlSafeguardLogic.Current.GetGarrisonText(zoneId);
+            frame.AddChidren(btnName);
+            //宸插惎鍔�
+            var btnStatu = new NormalViewControl(300, 46, true);
+            btnStatu.X = frame.Width - Application.GetRealWidth(300 + 35);
+            btnStatu.Y = Application.GetRealHeight(35);
+            btnStatu.TextSize = 12;
+            btnStatu.TextColor = UserCenterColor.Current.TextGrayColor1;
+            btnStatu.TextAlignment = TextAlignment.CenterRight;
+            btnStatu.TextID = R.MyInternationalizationString.uHadStarted;
+            frame.AddChidren(btnStatu);
+            //绌虹櫧琛�
+            var btnSpace = new FrameLayout();
+            btnSpace.Height = Application.GetRealHeight(46);
+            btnSpace.Y = btnIcon.Bottom;
+            frame.AddChidren(btnSpace);
+        }
+
+        #endregion
+
+        #region 鈻� 娣诲姞鎶ヨ淇℃伅_______________________
+
+        /// <summary>
+        /// 娣诲姞鎶ヨ淇℃伅
+        /// </summary>
+        /// <param name="alarmInfo"></param>
+        /// <returns></returns>
+        public int AddSafeguardAlarmInfo(SafeguardAlarmInfo alarmInfo)
+        {
+            if (dicFrame.ContainsKey(alarmInfo.ZoneId) == false)
+            {
+                return -1;
+            }
+            //涓�鏉′俊鎭噷闈紝瀹冨彲鑳藉寘鍚涓姤璀�
+            var listMsg = HdlAlarmsLogic.Current.GetSensorListAlarmMsg(alarmInfo);
+            int valueCount = 0;
+            foreach (var strMsg in listMsg)
+            {
+                //涓�涓姤璀︿俊鎭紝涓�涓帶浠�
+                int value = this.AddSafeguardAlarmInfo2(alarmInfo, strMsg);
+                //杩欎釜value鏄帶浠跺鍔犵殑楂樺害鍊�
+                valueCount += value;
+            }
+            return valueCount;
+        }
+
+        /// <summary>
+        /// 娣诲姞鎶ヨ淇℃伅(涓�涓姤璀︿俊鎭紝涓�涓帶浠�)
+        /// </summary>
+        /// <param name="alarmInfo"></param>
+        /// <param name="strMsg">閽堝涓�鏉℃暟鎹噷闈㈠寘鍚涓姤璀︾殑闂锛岃拷鍔犵殑鎶ヨ鏂囨湰</param>
+        /// <returns></returns>
+        private int AddSafeguardAlarmInfo2(SafeguardAlarmInfo alarmInfo, string strMsg)
+        {
+            if (dicFrame.ContainsKey(alarmInfo.ZoneId) == false)
+            {
+                return -1;
+            }
+            if (btnMsg != null)
+            {
+                //绉婚櫎淇℃伅鎻愮ず鎺т欢
+                btnMsg.RemoveFromParent();
+                btnMsg = null;
+            }
+            var listRow = dicRowFrame[alarmInfo.ZoneId];
+            if (listRow.Count == 0)
+            {
+                dicFrame[alarmInfo.ZoneId].Visible = true;
+                //閲嶇疆妗屽竷闂寸殑闂磋窛
+                int tempY = 0;
+                foreach (var frame in dicFrame.Values)
+                {
+                    if (frame.Visible == true)
+                    {
+                        frame.Y = tempY == 0 ? Application.GetRealHeight(98) : tempY;
+                        tempY = frame.Bottom;
+                    }
+                }
+            }
+
+            //娣诲姞鎶ヨ淇℃伅鎺т欢
+            var frameRow = this.AddAlarmInfoControl(alarmInfo, strMsg);
+            if (listRow.Count >= 100)
+            {
+                //绉婚櫎鏈�鍚庝竴涓�
+                listRow[listRow.Count - 1].RemoveFromParent();
+                listRow.RemoveAt(listRow.Count - 1);
+            }
+            //褰撳墠杩欎釜闃插尯鐨勫叏閮ㄨ鎺т欢寰�涓嬬Щ鍔�
+            foreach (var row in listRow)
+            {
+                row.Y += frameRow.Height + Application.GetRealHeight(23);
+            }
+            listRow.Insert(0, frameRow);
+
+            var value = listRow[listRow.Count - 1].Bottom + Application.GetRealHeight(55) - dicFrame[alarmInfo.ZoneId].Height;
+            if (value <= 0)
+            {
+                return 0;
+            }
+
+            //鍙樻洿楂樺害
+            dicFrame[alarmInfo.ZoneId].Height += value;
+            //瀹冧箣涓嬬殑鍏ㄩ儴妗屽竷鍏ㄩ儴寰�涓嬬Щ鍔�
+            bool canMove = false;
+            int realHeight = 0;
+            foreach (var id in dicFrame.Keys)
+            {
+                if (id == alarmInfo.ZoneId)
+                {
+                    //褰撳墠鐨勬甯�
+                    canMove = true;
+                }
+                else if (canMove == true)
+                {
+                    dicFrame[id].Y += value;
+                }
+                if (canMove == true && dicFrame[id].Visible == true)
+                {
+                    //璁板綍璧锋渶鍚庝竴涓狥rameLayout鐨勫簳閮�
+                    realHeight = dicFrame[id].Bottom;
+                }
+            }
+            if (realHeight > 0)
+            {
+                //鍙樻洿鏁翠釜鎺т欢鐨勭湡瀹為珮搴� 
+                this.frameTable.Height = realHeight;
+                this.Height = realHeight + Application.GetRealHeight(44);
+            }
+            //娣诲姞搴曢儴闃村奖鐗规晥
+            this.frameTable.SetViewShadow(true);
+
+            return value;
+        }
+
+        /// <summary>
+        /// 娣诲姞鎶ヨ淇℃伅鎺т欢
+        /// </summary>
+        /// <param name="alarmInfo"></param>
+        /// <returns></returns>
+        private FrameLayout AddAlarmInfoControl(SafeguardAlarmInfo alarmInfo, string strMsg)
+        {
+            var frame = dicFrame[alarmInfo.ZoneId];
+
+            var rowFrame = new FrameLayout();
+            rowFrame.Y = Application.GetRealHeight(130);
+            rowFrame.Height = Application.GetRealHeight(58);
+            frame.AddChidren(rowFrame);
+
+            //鎴块棿
+            var btnRoom = new NormalViewControl(165, 58, true);
+            btnRoom.X = Application.GetRealWidth(35);
+            btnRoom.TextColor = UserCenterColor.Current.TextGrayColor3;
+            btnRoom.Text = alarmInfo.RoomName;
+            rowFrame.AddChidren(btnRoom);
+            //璁惧
+            string mainkeys = Common.LocalDevice.Current.GetDeviceMainKeys(alarmInfo.DeviceAddr, alarmInfo.DeviceEpoint);
+            var device = Common.LocalDevice.Current.GetDevice(mainkeys);
+            var btnDevice = new NormalViewControl(271, 58, true);
+            btnDevice.X = Application.GetRealWidth(199);
+            btnDevice.TextColor = UserCenterColor.Current.TextGrayColor3;
+            btnDevice.Text = device == null ? alarmInfo.DeviceName : Common.LocalDevice.Current.GetDeviceEpointName(device);
+            rowFrame.AddChidren(btnDevice);
+            //鎶ヨ淇℃伅
+            var btnMsg = new NormalViewControl(303, 58, true);
+            btnMsg.X = Application.GetRealWidth(469);
+            btnMsg.TextColor = UserCenterColor.Current.TextGrayColor3;
+            btnMsg.Text = strMsg;
+            rowFrame.AddChidren(btnMsg);
+            //鏃堕棿锛氭椂鍒嗙
+            var btnTime = new NormalViewControl(190, 58, true);
+            btnTime.X = Application.GetRealWidth(758);
+            btnTime.TextColor = UserCenterColor.Current.TextGrayColor3;
+            btnTime.TextAlignment = TextAlignment.CenterRight;
+            btnTime.Text = alarmInfo.Time;
+            rowFrame.AddChidren(btnTime);
+
+            return rowFrame;
+        }
+
+        #endregion
+
+        #region 鈻� 鎺т欢閿�姣乢__________________________
+
+        /// <summary>
+        /// 鎺т欢閿�姣�
+        /// </summary>
+        public override void RemoveFromParent()
+        {
+            dicRowFrame.Clear();
+            dicFrame.Clear();
+
+            base.RemoveFromParent();
+        }
+
+        #endregion
+    }
+}

--
Gitblit v1.8.0