From df237b08cf97c27a2526b8f523f852f298a8b9b1 Mon Sep 17 00:00:00 2001
From: lss <316519258@qq.com>
Date: 星期一, 01 六月 2020 09:30:47 +0800
Subject: [PATCH] 0000

---
 ZigbeeApp/Shared/Phone/UserCenter/SmartSound/Forms/SmartSoundControlContentForm.cs |  558 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 558 insertions(+), 0 deletions(-)

diff --git a/ZigbeeApp/Shared/Phone/UserCenter/SmartSound/Forms/SmartSoundControlContentForm.cs b/ZigbeeApp/Shared/Phone/UserCenter/SmartSound/Forms/SmartSoundControlContentForm.cs
new file mode 100644
index 0000000..dc3d1db
--- /dev/null
+++ b/ZigbeeApp/Shared/Phone/UserCenter/SmartSound/Forms/SmartSoundControlContentForm.cs
@@ -0,0 +1,558 @@
+锘縰sing System;
+using System.Collections.Generic;
+using Shared.Common;
+using ZigBee.Device;
+
+namespace Shared.Phone.UserCenter.SmartSound.Forms
+{
+    public class SmartSoundControlContentForm : EditorCommonForm
+    {
+        /// <summary>
+        /// 涓存椂鏁版嵁
+        /// </summary>
+        private List<SmartSound.Layer> TempDatas = new List<SmartSound.Layer>();
+        
+        /// <summary>
+        /// 鍒楄〃鎺т欢
+        /// </summary>
+        private VerticalListControl listView = null;
+        
+        private FrameLayout contentLayout = null;
+        public int CurrentIndex = 0;
+        private BottomClickButton bottomClickButton = null;
+
+        public SmartSoundControlContentForm()            
+        {
+           //
+        }
+
+        /// <summary>
+        /// 鐢婚潰鏄剧ず(搴曞眰浼氬浐瀹氳皟鐢ㄦ鏂规硶锛屽�熶互瀹屾垚鐢婚潰鍒涘缓)
+        /// </summary>
+        public void ShowForm()
+        {
+            IniFloorData();//鍏堝姞杞芥暟鎹�
+            TempDatas.Clear();
+
+            this.ScrollEnabled = false;
+            base.SetTitleText("閫夋嫨鎴块棿");//璁剧疆鏍囬淇℃伅
+
+            contentLayout = new FrameLayout();
+            this.bodyFrameLayout.AddChidren(contentLayout);
+            
+            IniAllDataView();
+
+        }
+        
+        #region 鍔犺浇鏈湴鎵�鏈夋暟鎹紝鐢熸垚渚涚敤鎴烽�夋嫨鎴块棿鐨勭晫闈�
+
+        private void IniAllDataView()
+        {
+            contentLayout.RemoveAll();
+            
+            var pullLayout = new MyPullControl(this, SmartSound.LocaData);
+            contentLayout.AddChidren(pullLayout);
+            pullLayout.InitControl();
+
+            LoadAllRoomListView();
+
+            bottomClickButton = new BottomClickButton();
+            this.bodyFrameLayout.AddChidren(bottomClickButton);
+            bottomClickButton.Text = "纭";
+            bottomClickButton.ButtonClickEvent += (sender, e) =>
+            {
+                //淇濆瓨鏁版嵁
+                if (SmartSound.CurretnData == null)
+                    SmartSound.CurretnData = new List<SmartSound.Layer>();
+
+                SmartSound.CurretnData.Clear();
+                SmartSound.CurretnData = TempDatas;
+                this.CloseForm();
+            };
+
+            bottomClickButton.Visible = false;
+        }
+
+        private void LoadAllRoomListView()
+        {
+            try
+            {
+
+                if (SmartSound.LocaData == null || SmartSound.LocaData.Count < 1)
+                    return;
+
+                // 鍔犺浇褰撳墠妤煎眰鐨勬墍鏈夋埧闂� ListView
+                SmartSound.Layer layer = SmartSound.LocaData[CurrentIndex];
+                if (listView == null)
+                {
+                    
+                    listView = new VerticalListControl();
+                    contentLayout.AddChidren(listView);
+                    listView.Y = Application.GetRealHeight(173);
+                    listView.Height = bodyFrameLayout.Height- Application.GetRealHeight(173);
+                    
+                }
+
+                listView.RemoveAll();
+
+                foreach(SmartSound.Room room in layer.RoomList)
+                {
+                    var roomRowLayout = new RoomRowLayout(this, room);
+                    listView.AddChidren(roomRowLayout);
+                    roomRowLayout.InitControl();
+                }
+                
+            }
+            catch { }
+        }
+
+        #endregion
+        /// <summary>
+        /// 灏嗘暟鎹浆鎹负鏅鸿兘闊崇浣跨敤鐨勬暟鎹�
+        /// </summary>
+        private void IniFloorData()
+        {
+            #region//1.浠庢湇鍔″櫒鑾峰彇鐨勬暟鎹紝json鍙嶅簭鍒楀寲寰楁潵
+            //2.鐐瑰嚮"+"灏嗙綉鍏崇殑鏁版嵁杞崲涓� 鏅鸿兘闊崇浣跨敤鐨勬暟鎹�
+            /*{
+
+                Dictionary<string, string> ss = Config.Instance.Home.FloorDics;//妤煎眰鍒楄〃
+                string currentFloor = Config.Instance.Home.CurrentFloorId;//褰撳墠妤煎眰鐨勯敭
+
+                var listRoom = HdlRoomLogic.Current.GetFloorSortRoom("妤煎眰鐨勪富閿�");//鑾峰彇褰撳墠妤煎眰鐨勬墍鏈夋埧闂�
+                var room = listRoom[0];
+                for (int i=0;i<room.ListDevice.Count;i++)
+                {//璁惧鏁版嵁
+                    var device = LocalDevice.Current.GetDevice(room.ListDevice[i]);
+                    var myType = LocalDevice.Current.GetNotHdlMyDeviceEnumInfo(new List<CommonDevice>() { device });                                      
+
+                    if (myType.BeloneType == DeviceBeloneType.A鐏厜)
+                    {
+                        //杩欓噷闈㈢殑灏辨槸鐏厜浜�
+                        var light = device;
+                        // light.DeviceAddr;  璁惧鐨勫湴鍧�
+                        // light.DeviceEpoint;//璁惧鐨勭鍙�
+                    }
+                }
+
+                for (int i = 0; i < room.ListSceneId.Count; i++)
+                {   //鍦烘櫙鏁版嵁
+                    var device = HdlSceneLogic.Current.GetSceneUIBySceneId(room.ListSceneId[i]);
+                    // device.Id;鍦烘櫙 id
+                }
+            }*/
+            #endregion
+
+            if (SmartSound.LocaData == null)
+                SmartSound.LocaData = new List<SmartSound.Layer>();
+
+            SmartSound.LocaData.Clear();
+            
+            Dictionary<string, string> floorDictionary = Config.Instance.Home.FloorDics;//妤煎眰鍒楄〃
+
+            #region 鍒嗘ゼ灞�
+            if (floorDictionary.Count < 1)
+            {
+                //娌℃湁妤煎眰,妯℃嫙涓�涓�
+                SmartSound.Layer layer = new SmartSound.Layer();
+                layer.LayerID = "0000";
+                layer.LayerName = "涓�妤�";
+                layer.RoomList.Clear();
+                SmartSound.LocaData.Add(layer);
+            }
+            else
+            {
+                foreach (string layer_id in floorDictionary.Keys)
+                {
+                    SmartSound.Layer layer = new SmartSound.Layer();
+                    layer.LayerID = layer_id;
+                    layer.LayerName = floorDictionary[layer_id];
+                    layer.RoomList.Clear();
+                    SmartSound.LocaData.Add(layer);
+                }
+            }
+            #endregion
+
+            #region 鎴块棿鍏ヤ綇瀵瑰簲鐨勬ゼ灞�
+            var roomList = HdlRoomLogic.Current.GetAllListRooms();//鑾峰彇鎵�鏈夋埧闂�
+
+            for (int n = 0; n < SmartSound.LocaData.Count; n++)
+            {
+                SmartSound.Layer layer = SmartSound.LocaData[n];
+
+                foreach (Room room in roomList)
+                {
+                    try
+                    {
+                        if (layer.LayerID != room.FloorId && SmartSound.LocaData.Count > 1)
+                            continue;
+
+                        //娣诲姞鎴块棿
+                        SmartSound.Room smartRoom = new SmartSound.Room();
+                        layer.RoomList.Add(smartRoom);
+
+                        smartRoom.RoomID = room.Id;
+                        smartRoom.RoomName = room.Name;
+                        smartRoom.DeviceList.Clear();
+                        smartRoom.SceneList.Clear();
+
+                        #region 娣诲姞璁惧 鐏厜銆佺獥甯樸�佸満鏅�佺┖璋�
+                        for (int j = 0; j < room.ListDevice.Count; j++)
+                        {
+                            string key = room.ListDevice[j].ToString();
+                            var device = LocalDevice.Current.GetDevice(key);
+                            if (device == null)
+                                continue;
+
+                            SmartSound.Device smartDevice = new SmartSound.Device();
+                            smartDevice.Id = device.DeviceID.ToString();//璁惧 Id
+                            smartDevice.DeviceAddress = device.DeviceAddr;//璁惧 MAC
+                            smartDevice.Epoint = device.DeviceEpoint;//璁惧绔彛
+                            smartDevice.ClusterID = 0;
+                            smartDevice.DeviceName = device.DeviceName;//璁惧鍚嶇О
+                            smartDevice.NicksName = "";
+                            smartDevice.DeviceType = GetDeviceType(device);//璁惧绫诲瀷
+                            smartDevice.GatewayID = device.CurrentGateWayId;//缃戝叧 Id
+                            smartDevice.RoomID = room.Id;//鎴块棿 Id
+
+                            smartRoom.DeviceList.Add(smartDevice);
+
+                        }
+                        #endregion
+
+                        var sceneList = HdlSceneLogic.Current.GetRoomSceneList(room);
+
+                        #region //娣诲姞鍦烘櫙
+                        for (int k = 0; k < sceneList.Count; k++)
+                        {
+                            SceneUI scene = sceneList[k];
+                            if (scene == null) continue;
+                            SmartSound.Scene smartScene = new SmartSound.Scene();
+                            smartScene.Id = scene.DeviceID.ToString();
+                            smartScene.SceneName = scene.Name;
+                            smartScene.SceneID = scene.Id;
+                            smartScene.DelayTime = scene.DelayTime;
+                            smartScene.ClusterID = 0;
+                            smartScene.NicksName = "";
+                            smartScene.RoomID = room.Id;
+
+                            smartRoom.SceneList.Add(smartScene);
+                        }
+                        #endregion
+
+                    }
+                    catch (Exception e)
+                    {
+                        string errpr = e.Message;
+                    }
+                }
+            }
+            #endregion
+
+        }
+
+        /// <summary>
+        /// Zigbee璁惧绫诲瀷杞崲涓烘櫤鑳介煶绠变娇鐢ㄧ殑绫诲瀷
+        /// </summary>
+        /// <returns></returns>
+        private int GetDeviceType(ZigBee.Device.CommonDevice device)
+        {
+            int type = 0;//1=寮�鍏崇伅锛�2=璋冨厜鐏紝3=RGB 鐏紝4=绐楀笜妯″潡锛�5=寮�鍚堝笜锛�6=鍗峰笜锛�7=绌鸿皟锛�8=闈㈡澘锛�9=鏂伴
+
+            if (device.Type == DeviceType.OnOffOutput && device.DfunctionType == DeviceFunctionType.A鐏厜)
+            {
+                type = 1;//杩欓噷闈㈢殑灏辨槸缁х數鍣ㄧ伅鍏変簡
+            }
+            else if (device.Type == DeviceType.DimmableLight)
+            {
+                type = 2;//璋冨厜
+            }
+            else if (device.Type == DeviceType.ColorDimmableLight)
+            {
+                type = 3;
+            }
+            else if (device.Type == DeviceType.WindowCoveringDevice)
+            {
+                //绐楀笜
+                if (((Rollershade)device).WcdType == 4)//寮�鍚堝笜
+                {
+                    type = 5;
+                }
+                else if (((Rollershade)device).WcdType == 0)//鍗峰笜
+                    type = 6;//鍗峰笜
+            }
+            else if (device.Type == DeviceType.Thermostat)
+            {
+                type = 7;
+            }
+            else if (device.Type == DeviceType.FreshAir)
+            {
+                type = 9;
+            }
+
+            return type;
+        }
+
+        /// <summary>
+        /// 灏嗛�変腑鐨勬暟鎹坊鍔犲埌涓存椂鏁版嵁鍒楄〃涓紝渚夸簬鍚庢湡鐨�"淇濆瓨"
+        /// </summary>
+        private void AddData(SmartSound.Room room)
+        {
+            if (TempDatas == null)
+                TempDatas = new List<SmartSound.Layer>();
+
+            SmartSound.Layer tempLayer = SmartSound.LocaData[CurrentIndex];
+            if (tempLayer == null) return;
+
+            #region 娣诲姞妤煎眰
+
+            bool floor_exists = false;
+            // 杩囨护鐩稿悓鐨勬ゼ灞�
+            for (int i = 0; i < TempDatas.Count; i++)
+            {
+                if (tempLayer.LayerID == TempDatas[i].LayerID)
+                {
+                    floor_exists = true;
+                    break;
+                }
+            }
+
+            if (!floor_exists)
+            {
+                tempLayer.RoomList.Clear();
+                TempDatas.Add(tempLayer);
+            }
+              
+
+            #endregion
+
+            #region 娣诲姞鎴块棿
+
+            for (int i = 0; i < TempDatas.Count; i++)
+            {
+                if (SmartSound.LocaData[CurrentIndex].LayerID != TempDatas[i].LayerID)
+                    continue;
+
+                bool room_exists = false;
+
+                for (int n = 0; n < TempDatas[i].RoomList.Count; n++)
+                {
+                    if (room.RoomID == TempDatas[i].RoomList[n].RoomID)
+                    {
+                        room_exists = true;
+                        break;
+                    }
+                }
+
+                if (!room_exists)
+                {
+                    TempDatas[i].RoomList.Add(room);
+                    break;
+                }
+            }
+
+            #endregion
+
+        }
+
+        private void RemoveData(SmartSound.Room room)
+        {
+            try
+            {
+                for (int i = 0; i < TempDatas.Count; i++)
+                {
+                 
+                    for (int j = 0; j < TempDatas[i].RoomList.Count; j++)
+                    {
+                        if (TempDatas[i].RoomList[j].RoomID == room.RoomID)
+                        {
+                            TempDatas[i].RoomList.RemoveAt(j);
+                        }
+                    }
+                }
+            }
+            catch { }
+        }
+
+        #region 鈻� 鑷畾涔夋ゼ灞傞�夋嫨鎺т欢_____________________
+
+        /// <summary>
+        /// 鎴块棿鍒楄〃琛�
+        /// </summary>
+        private class MyPullControl : FrameRowControl
+        {
+
+            private SmartSoundControlContentForm smartSoundDataAdd = null;
+            private List<SmartSound.Layer> Layers = null;
+            /// <summary>
+            /// 鎴块棿鍒楄〃
+            /// </summary>
+            private NormalViewControl btnName = null;
+
+            /// <summary>
+            /// 鎴块棿鍒楄〃琛�
+            /// </summary>
+            public MyPullControl(SmartSoundControlContentForm _SmartSoundDataAdd,List<SmartSound.Layer> _layers)
+            {
+                this.smartSoundDataAdd = _SmartSoundDataAdd;
+                this.Layers = _layers;
+                this.UseClickStatu = false;
+                this.BackgroundColor = UserCenterColor.Current.White;
+                this.Height = Application.GetRealHeight(173);
+            }
+            
+            /// <summary>
+            /// 鍒濆鍖栨帶浠�
+            /// </summary>
+            public void InitControl()
+            {
+                //鏄剧ず鏂囨湰
+                btnName = this.AddLeftCaption(string.Empty, 700);
+                btnName.Height = Application.GetRealHeight(60);
+                btnName.TextSize = 17;
+                btnName.Y = Application.GetRealHeight(57);
+                btnName.Text = "鎴块棿鍒楄〃";
+
+                var right_icon=this.AddRightArrow();
+                right_icon.SelectedImagePath = "SmartSound/PullDown.png";
+                right_icon.UnSelectedImagePath = "SmartSound/PullDown.png";
+                right_icon.ButtonClickEvent += (sender, e) =>
+                {
+                    ShowPullList();
+                };
+
+                var layout = this.AddMostRightView(Layers[smartSoundDataAdd.CurrentIndex].LayerName, 300, false);                
+                layout.Name = "pullLayout";
+                layout.ButtonClickEvent += (sender, e) =>
+                {
+                    ShowPullList();
+                };                              
+                
+            }
+
+            private void ShowPullList()
+            {
+                //鎴块棿鍒楄〃琛寋鎴块棿鍒楄〃 textView锛屾ゼ灞備笅鎷夌獥}
+                //鏄剧ず鎴块棿{甯﹂�夋嫨妗嗙殑锛涘綋閫変腑浜嗘埧闂村悗闇�瑕佸湪搴曢儴寮瑰嚭纭鎸夐挳锛岀偣鍑荤‘璁よ烦杞埌鏂扮殑鐣岄潰}
+                var pull_frame = new TopRightMenuControl(Layers.Count, 2);
+                pull_frame.Y = this.Height;
+
+                for (int i = 0; i < Layers.Count; i++)
+                {
+                    //鍒涘缓妤煎眰
+                    pull_frame.AddRowMenu(Layers[i].LayerName, "Item/CreatFloor.png", "Item/CreatFloorSelected.png", () =>
+                    {
+                        smartSoundDataAdd.CurrentIndex = i;
+                        smartSoundDataAdd.LoadAllRoomListView();
+                    });
+                }
+            }
+        }
+        #endregion
+               
+        #region 鈻� 鑷畾涔夋埧闂撮�夋嫨鎺т欢_____________________
+
+        /// <summary>
+        /// 鎴块棿鍒楄〃琛�
+        /// </summary>
+        private class RoomRowLayout : FrameRowControl
+        {
+            private SmartSoundControlContentForm smartSoundControlContentForm = null;
+            private SmartSound.Room mRoom = null;
+            /// <summary>
+            /// 鎴块棿鍚嶇О
+            /// </summary>
+            private NormalViewControl btnName = null;
+
+            private IconViewControl Right_icon = null;            
+
+            /// <summary>
+            /// 鎴块棿鍒楄〃琛�
+            /// </summary>
+            public RoomRowLayout(SmartSoundControlContentForm _smartSoundControlContentForm,SmartSound.Room _room)
+            {
+                this.smartSoundControlContentForm = _smartSoundControlContentForm;
+                this.mRoom = _room;
+                this.UseClickStatu = false;
+                this.BackgroundColor = UserCenterColor.Current.White;
+                this.Height = Application.GetRealHeight(170);
+            }
+            
+            /// <summary>
+            /// 鍒濆鍖栨帶浠�
+            /// </summary>
+            public void InitControl()
+            {
+                //鏄剧ず鏂囨湰
+                btnName = this.AddLeftCaption(string.Empty, 700);
+                btnName.Height = Application.GetRealHeight(60);
+                btnName.TextSize = 17;
+                btnName.Y = Application.GetRealHeight(57);
+                btnName.Text = mRoom.RoomName;
+                Right_icon = this.AddRightArrow();
+                Right_icon.Width = Application.GetRealWidth(115);
+                Right_icon.Height = Application.GetRealHeight(115);
+                Right_icon.Gravity = Gravity.CenterVertical;
+                Right_icon.X = Right_icon.X - Application.GetRealWidth(60);
+
+                btnName.ButtonClickEvent += (sender, e) =>
+                {
+                    SmartSoundContentForDevice deviceForm = new SmartSoundContentForDevice(mRoom);
+                    deviceForm.AddForm();
+                };
+
+                this.Right_icon.ButtonClickEvent += (sender, e) =>
+                {
+                    mRoom.Checked = !mRoom.Checked;
+                    RefreshRightIconState(mRoom.Checked);
+                };
+
+                RefreshRightIconState(mRoom.Checked);
+                AddBottomLine();
+
+            }
+
+            private void RefreshRightIconState(bool bol = false)
+            {
+                try
+                {
+                    if (bol)
+                    {
+                        Right_icon.SelectedImagePath = "SmartSound/CheckBoxSel.png";
+                        Right_icon.UnSelectedImagePath = "SmartSound/CheckBoxSel.png";
+
+                        smartSoundControlContentForm.AddData(mRoom);
+                    }
+                    else
+                    {
+                        Right_icon.SelectedImagePath = "SmartSound/CheckBoxDef.png";
+                        Right_icon.UnSelectedImagePath = "SmartSound/CheckBoxDef.png";
+
+                        smartSoundControlContentForm.RemoveData(mRoom);
+                    }
+
+                    bool isShow = false;
+
+                    if(smartSoundControlContentForm==null) return;
+
+                    foreach (SmartSound.Room _room in SmartSound.LocaData[smartSoundControlContentForm.CurrentIndex].RoomList)
+                    {
+                        if (_room.Checked)
+                        {
+                            isShow = true;                           
+                            break;
+                        }
+                    }
+
+                    smartSoundControlContentForm.bottomClickButton.Visible = isShow;
+                }
+                catch(Exception e)
+                {
+                    string error = e.Message;
+                }
+            }
+
+        }
+        #endregion
+    }
+}

--
Gitblit v1.8.0