xm
2020-12-14 d6fb0646531172f23648441c224cdcccd721b894
ZigbeeApp/Shared/Phone/MainPage/UnallocatedRoomForm.cs
New file
@@ -0,0 +1,779 @@
using System;
using System.Collections.Generic;
using Shared.Common;
using Shared.Phone.Device.CommonForm;
using Shared.Phone.UserCenter;
using Shared.Phone.UserView;
using ZigBee.Device;
namespace Shared.Phone.MainPage
{
    /// <summary>
    /// 未分配的管理界面
    /// </summary>
    public class UnallocatedRoomForm : EditorCommonForm
    {
        #region ■ 变量声明___________________________
        /// <summary>
        /// 界面关闭事件
        /// </summary>
        public Action FormCloseEvent = null;
        /// <summary>
        /// 添加到 的背景图控件
        /// </summary>
        private FrameLayoutStatuControl frameAddBackGroud = null;
        /// <summary>
        /// 功能的桌布控件
        /// </summary>
        private NormalFrameLayout DeviceBodyTableControl = null;
        /// <summary>
        /// 场景的列表控件
        /// </summary>
        private VerticalFrameControl listSceneView = null;
        /// <summary>
        /// 设备的列表控件
        /// </summary>
        private VerticalListControl listDeviceView = null;
        /// <summary>
        /// 场景的桌布控件
        /// </summary>
        private NormalFrameLayout SceneBodyTableControl = null;
        /// <summary>
        /// 全选控件
        /// </summary>
        private NormalViewControl btnAllSelect = null;
        /// <summary>
        /// 选择的场景
        /// </summary>
        private Dictionary<int, SceneUI> dicSelectScene = new Dictionary<int, SceneUI>();
        /// <summary>
        /// 选择的设备
        /// </summary>
        private Dictionary<string, CommonDevice> dicSelectDevice = new Dictionary<string, CommonDevice>();
        /// <summary>
        /// 当前选择的设备类型信息(为了处理速度使用)
        /// </summary>
        private DeviceRowInfo nowSelectDeviceInfo = null;
        /// <summary>
        /// 全部分组的设备信息
        /// </summary>
        private Dictionary<string, DeviceRowInfo> dicGroupDevice = null;
        /// <summary>
        /// 是否已经改变了数据
        /// </summary>
        private bool dataHadChanged = false;
        /// <summary>
        /// 能否全选的状态
        /// </summary>
        private bool canSelectAll = true;
        #endregion
        #region ■ 初始化_____________________________
        /// <summary>
        /// 画面显示(底层会固定调用此方法,借以完成画面创建)
        /// </summary>
        public void ShowForm()
        {
            //初始化头部控件
            this.InitTopFrameLayout();
            //初始化中部控件
            this.InitBodyFrameLayout();
            //设置头部信息
            base.SetTitleText(Language.StringByID(R.MyInternationalizationString.Unallocated));
            //初始化全选控件
            this.InitAllSelectControl();
            //初始化中部信息
            this.InitMiddleFrame();
        }
        /// <summary>
        /// 初始化中部信息
        /// </summary>
        private void InitMiddleFrame()
        {
            var tabControl = new SceneFunctionSwitchControl();
            tabControl.Y = Application.GetRealHeight(40);
            bodyFrameLayout.AddChidren(tabControl);
            //初始化场景桌布
            this.SceneBodyTableControl = new NormalFrameLayout();
            SceneBodyTableControl.Y = tabControl.Bottom;
            SceneBodyTableControl.Height = bodyFrameLayout.Height - tabControl.Bottom;
            bodyFrameLayout.AddChidren(SceneBodyTableControl);
            //初始化设备桌布
            this.DeviceBodyTableControl = new NormalFrameLayout();
            DeviceBodyTableControl.Y = tabControl.Bottom;
            DeviceBodyTableControl.Height = bodyFrameLayout.Height - tabControl.Bottom;
            bodyFrameLayout.AddChidren(DeviceBodyTableControl);
            tabControl.SelectTabEvent += (index) =>
            {
                //场景
                if (index == 0)
                {
                    //初始化场景分支的控件
                    this.InitSceneCaseControl();
                    //检测各控件状态
                    this.CheckControlsStatu(null);
                }
                //功能
                else
                {
                    //初始化功能分支的控件
                    this.InitDeviceCaseControl();
                    //检测各控件状态
                    this.CheckControlsStatu(this.nowSelectDeviceInfo);
                }
            };
            //开始初始化场景功能切换控件
            var listTitle = new List<string>();
            listTitle.Add(Language.StringByID(R.MyInternationalizationString.uScence));
            listTitle.Add(Language.StringByID(R.MyInternationalizationString.uFunction));
            //他会自动回调事件
            tabControl.InitControl(listTitle);
        }
        #endregion
        #region ■ 场景分支___________________________
        /// <summary>
        /// 初始化场景分支的控件
        /// </summary>
        private void InitSceneCaseControl()
        {
            //隐藏设备列表
            this.DeviceBodyTableControl.Visible = false;
            //显示场景
            this.SceneBodyTableControl.Visible = true;
            if (this.SceneBodyTableControl.Name == "Scene")
            {
                //已经初始化过
                return;
            }
            //打个标识而已
            this.SceneBodyTableControl.Name = "Scene";
            //开始执行初始化场景分支的控件
            this.DoInitSceneCaseControl();
        }
        /// <summary>
        /// 开始执行初始化场景分支的控件
        /// </summary>
        private void DoInitSceneCaseControl()
        {
            HdlThreadLogic.Current.RunMainInThread(() =>
            {
                //清空桌布
                this.SceneBodyTableControl.RemoveAll();
                this.listSceneView = new VerticalFrameControl(3);
                listSceneView.Y = Application.GetRealHeight(53);
                listSceneView.Height = SceneBodyTableControl.Height;
                SceneBodyTableControl.AddChidren(listSceneView);
                var listScene = HdlSceneLogic.Current.GetUnalloctedScenes();
                if (listScene.Count == 0) { return; }
                foreach (var data in listScene)
                {
                    //场景图片
                    var frameContr = new ScenePictrueControl();
                    listSceneView.AddChidren(frameContr);
                    frameContr.InitControl(data);
                    //添加选择控件
                    frameContr.AddSelectControl();
                    //收藏
                    frameContr.AddCollectionControl();
                    frameContr.CollectEvent += (collect) =>
                    {
                        //如果当前是收藏房间,则需要刷新主页
                        if (HdlRoomLogic.Current.NowMainPageRoom.IsLove == true)
                        {
                            this.dataHadChanged = true;
                        }
                    };
                    frameContr.ButtonClickEvent += (sender, e) =>
                    {
                        //选择
                        frameContr.IsSelected = !frameContr.IsSelected;
                        if (frameContr.IsSelected == true)
                        {
                            dicSelectScene[data.Id] = data;
                        }
                        else
                        {
                            dicSelectScene.Remove(data.Id);
                        }
                        //检测各控件状态
                        this.CheckControlsStatu(null);
                    };
                }
                //促使它超过时,能够往上滑
                var frameTemp = new FrameLayout();
                frameTemp.Height = Application.GetRealHeight(202 + 23);
                listSceneView.AddChidren(frameTemp);
            });
        }
        #endregion
        #region ■ 功能分支___________________________
        /// <summary>
        /// 初始化功能分支的控件
        /// </summary>
        private void InitDeviceCaseControl()
        {
            //隐藏场景列表
            this.SceneBodyTableControl.Visible = false;
            //显示功能
            this.DeviceBodyTableControl.Visible = true;
            if (this.DeviceBodyTableControl.Name == "Function")
            {
                //已经初始化过
                return;
            }
            //打个标识而已
            this.DeviceBodyTableControl.Name = "Function";
            //开始执行初始化功能分支的控件
            this.DoInitDeviceCaseControl();
        }
        /// <summary>
        /// 开始执行初始化功能分支的控件
        /// </summary>
        private void DoInitDeviceCaseControl()
        {
            HdlThreadLogic.Current.RunMainInThread(() =>
            {
                //清空桌布,不清空这个的话,它里面还有上一次的东西
                this.listDeviceView?.RemoveAll();
                this.DeviceBodyTableControl.RemoveAll();
                //获取分组后的设备列表
                this.dicGroupDevice = this.GetAllGroupDevice();
                if (dicGroupDevice.Count == 0)
                {
                    this.listDeviceView = null;
                    return;
                }
                //设备的背景容器
                var frameDeviceBack = new FrameLayout();
                frameDeviceBack.X = ControlCommonResourse.XXLeft;
                frameDeviceBack.Y = Application.GetRealHeight(369);
                frameDeviceBack.BackgroundColor = UserCenterColor.Current.White;
                frameDeviceBack.Width = bodyFrameLayout.Width;
                frameDeviceBack.Height = Application.GetRealHeight(1236);
                frameDeviceBack.Radius = (uint)Application.GetRealHeight(58);
                DeviceBodyTableControl.AddChidren(frameDeviceBack);
                //设备列表控件
                this.listDeviceView = new VerticalListControl(35);
                listDeviceView.Y = Application.GetRealHeight(14);
                listDeviceView.Height = Application.GetRealHeight(1236 - 14);
                frameDeviceBack.AddChidren(listDeviceView);
                //初始化设备类型菜单
                this.InitDeviceObjectMenu();
            });
        }
        #endregion
        #region ■ 初始化设备类型菜单_________________
        /// <summary>
        /// 初始化设备类型菜单
        /// </summary>
        private void InitDeviceObjectMenu()
        {
            //头部的白色背景
            var functionBack1 = new FrameLayout();
            functionBack1.X = ControlCommonResourse.XXLeft;
            functionBack1.Y = Application.GetRealHeight(55);
            functionBack1.Height = Application.GetRealHeight(160);
            functionBack1.Width = Application.GetRealWidth(1028);
            functionBack1.BackgroundColor = ZigbeeColor.Current.GXCBackgroundColor;
            DeviceBodyTableControl.AddChidren(functionBack1);
            functionBack1.SetCornerWithSameRadius(Application.GetRealHeight(17), HDLUtils.RectCornerTopLeft);
            var functionBack2 = new FrameLayout();
            functionBack2.X = ControlCommonResourse.XXLeft;
            functionBack2.Y = functionBack1.Bottom - Application.GetRealHeight(50);
            functionBack2.Height = Application.GetRealHeight(279 - 160 + 50);
            functionBack2.Width = Application.GetRealWidth(1028);
            functionBack2.BackgroundColor = ZigbeeColor.Current.GXCBackgroundColor;
            DeviceBodyTableControl.AddChidren(functionBack2);
            functionBack2.SetCornerWithSameRadius(Application.GetRealHeight(58), HDLUtils.RectCornerBottomLeft);
            //左右滑动的控件
            var HorizontalView = new HorizontalScrolViewLayout();
            HorizontalView.X = Application.GetRealWidth(CommonFormResouce.X_Left);
            HorizontalView.Y = Application.GetRealHeight(55);
            HorizontalView.Height = Application.GetRealHeight(279);
            HorizontalView.Width = Application.GetRealWidth(1028);
            DeviceBodyTableControl.AddChidren(HorizontalView);
            //上一次选择的菜单
            Controls.DeviceFunctionMenuControl oldSelectContr = null;
            foreach (string strText in this.dicGroupDevice.Keys)
            {
                var rowInfo = dicGroupDevice[strText];
                //设备类型的容器
                var devieFrame = new FrameLayout();
                devieFrame.Width = Application.GetRealWidth(220);
                HorizontalView.AddChidren(devieFrame);
                //菜单图片控件
                var deviceObjContr = new Controls.DeviceFunctionMenuControl();
                devieFrame.AddChidren(deviceObjContr);
                deviceObjContr.InitControl(strText, rowInfo.IconPath, rowInfo.IconPathSelected);
                deviceObjContr.ButtonClickEvent += (sender, e) =>
                {
                    //选择的是同一个东西的话,不处理
                    if (this.nowSelectDeviceInfo.Text != rowInfo.Text)
                    {
                        //上一次的菜单取消,本次菜单选择
                        oldSelectContr.SetSelectStatu(false);
                        deviceObjContr.SetSelectStatu(true);
                        oldSelectContr = deviceObjContr;
                        this.nowSelectDeviceInfo = rowInfo;
                        HdlThreadLogic.Current.RunMainInThread(() =>
                        {
                            //初始化设备列表控件
                            this.InitListDeviceControls(rowInfo);
                            //检测各控件状态
                            this.CheckControlsStatu(this.nowSelectDeviceInfo);
                        });
                    }
                };
                if (this.nowSelectDeviceInfo == null)
                {
                    //设置初始选择
                    this.nowSelectDeviceInfo = rowInfo;
                    //记录初始选择的菜单控件
                    oldSelectContr = deviceObjContr;
                    deviceObjContr.SetSelectStatu(true);
                }
            }
            if (this.nowSelectDeviceInfo != null)
            {
                //初始化默认的设备列表控件
                this.InitListDeviceControls(nowSelectDeviceInfo);
            }
        }
        #endregion
        #region ■ 初始化设备列表控件_________________
        /// <summary>
        /// 初始化设备列表控件
        /// </summary>
        /// <param name="rowInfo"></param>
        /// <param name="listView"></param>
        private void InitListDeviceControls(DeviceRowInfo rowInfo)
        {
            this.listDeviceView.RemoveAll();
            //初始化设备列表控件
            foreach (var deviceKey in rowInfo.listDeviceKeys)
            {
                var device = LocalDevice.Current.GetDevice(deviceKey);
                var deviceRow = new Controls.DeviceSelectUnallocatedControl(listDeviceView.rowSpace / 2);
                listDeviceView.AddChidren(deviceRow);
                deviceRow.InitControl(device);
                if (this.dicSelectDevice.ContainsKey(deviceKey) == true)
                {
                    //如果它之前选择了的话
                    deviceRow.IsSelected = true;
                }
                deviceRow.ButtonClickEvent += (sender, e) =>
                {
                    deviceRow.IsSelected = !deviceRow.IsSelected;
                    //记录缓存
                    if (deviceRow.IsSelected == true)
                    {
                        this.dicSelectDevice[deviceKey] = device;
                    }
                    else
                    {
                        this.dicSelectDevice.Remove(deviceKey);
                    }
                    //检测各控件状态
                    this.CheckControlsStatu(rowInfo);
                };
            }
            //促使它超过时,能够往上滑
            var frameTemp = new FrameLayout();
            frameTemp.Height = Application.GetRealHeight(202 + 23);
            listDeviceView.AddChidren(frameTemp);
        }
        #endregion
        #region ■ 全选控件___________________________
        /// <summary>
        /// 初始化全选控件
        /// </summary>
        private void InitAllSelectControl()
        {
            this.btnAllSelect = new NormalViewControl(150, 70, true);
            btnAllSelect.TextAlignment = TextAlignment.CenterRight;
            btnAllSelect.X = topFrameLayout.Width - Application.GetRealWidth(150 + 115);
            btnAllSelect.Gravity = Gravity.CenterVertical;
            btnAllSelect.TextID = R.MyInternationalizationString.AllSelect;
            btnAllSelect.IsBold = true;
            topFrameLayout.AddChidren(btnAllSelect);
            btnAllSelect.ButtonClickEvent += (sender, e) =>
            {
                //场景分支
                if (SceneBodyTableControl.Visible == true)
                {
                    if (listSceneView == null) { return; }
                    for (int i = 0; ; i++)
                    {
                        var myContr = listSceneView.frameTable.GetChildren(i);
                        if (myContr == null)
                        {
                            break;
                        }
                        if (myContr is ScenePictrueControl)
                        {
                            ((ScenePictrueControl)myContr).IsSelected = this.canSelectAll;
                            var scene = ((ScenePictrueControl)myContr).scene;
                            if (this.canSelectAll == true)
                            {
                                //添加缓存
                                dicSelectScene[scene.Id] = scene;
                            }
                            else
                            {
                                //移除缓存
                                dicSelectScene.Remove(scene.Id);
                            }
                        }
                    }
                    //检测各控件状态
                    this.CheckControlsStatu(null);
                }
                //功能分支
                else
                {
                    if (listDeviceView == null) { return; }
                    for (int i = 0; ; i++)
                    {
                        var myContr = listDeviceView.GetChildren(i);
                        if (myContr == null)
                        {
                            break;
                        }
                        if (myContr is Controls.DeviceSelectUnallocatedControl)
                        {
                            ((Controls.DeviceSelectUnallocatedControl)myContr).IsSelected = this.canSelectAll;
                            var device = ((Controls.DeviceSelectUnallocatedControl)myContr).device;
                            if (this.canSelectAll == true)
                            {
                                //添加缓存
                                dicSelectDevice[LocalDevice.Current.GetDeviceMainKeys(device)] = device;
                            }
                            else
                            {
                                //移除缓存
                                dicSelectDevice.Remove(LocalDevice.Current.GetDeviceMainKeys(device));
                            }
                        }
                    }
                    //检测各控件状态
                    this.CheckControlsStatu(this.nowSelectDeviceInfo);
                }
            };
        }
        #endregion
        #region ■ [添加到]控件_______________________
        /// <summary>
        /// 初始化添加到控件
        /// </summary>
        private void InitAddToControl()
        {
            //添加到 的背景图控件
            this.frameAddBackGroud = new FrameLayoutStatuControl();
            frameAddBackGroud.UseClickStatu = false;
            frameAddBackGroud.Height = Application.GetRealHeight(202);
            frameAddBackGroud.Gravity = Gravity.BottomCenter;
            frameAddBackGroud.BackgroundImagePath = "Room/AddBackground.png";
            bodyFrameLayout.AddChidren(frameAddBackGroud);
            frameAddBackGroud.Visible = false;
            //添加到 按钮
            var btnAdd = new NormalViewControl(1034, 156, true);
            btnAdd.Gravity = Gravity.Center;
            btnAdd.BackgroundColor = UserCenterColor.Current.White;
            btnAdd.TextColor = ZigbeeColor.Current.GXCTextSelectedColor4;
            btnAdd.TextAlignment = TextAlignment.Center;
            btnAdd.TextID = R.MyInternationalizationString.AddTo;
            btnAdd.TextSize = 17;
            btnAdd.Radius = (uint)Application.GetRealHeight(35);
            frameAddBackGroud.AddChidren(btnAdd, ChidrenBindMode.BindEvent);
            frameAddBackGroud.ButtonClickEvent += (sender, e) =>
            {
                HdlControlLogic.Current.ShowBottomListRoomView(string.Empty, Language.StringByID(R.MyInternationalizationString.AddTo), (selectId, selectName) =>
                {
                    if (selectId == string.Empty)
                    {
                        //选择的是未分配
                        return;
                    }
                    //变更了当前房间的东西,主页需要刷新
                    if (HdlRoomLogic.Current.NowMainPageRoom.Id == selectId)
                    {
                        this.dataHadChanged = true;
                    }
                    //保存选择的设备和场景
                    var room = HdlRoomLogic.Current.GetRoomById(selectId);
                    this.SaveSelectDeviceAndScene(room);
                    //分类界面需要刷新
                    UserPage.Instance.RefreshCategoryForm = true;
                    //上传空间区域信息
                    HdlRoomLogic.Current.SetRoomInfoToGateway();
                });
            };
        }
        /// <summary>
        /// 保存选择的设备和场景
        /// </summary>
        /// <param name="room"></param>
        private void SaveSelectDeviceAndScene(Room room)
        {
            foreach (var deviceKey in this.dicSelectDevice.Keys)
            {
                //添加设备
                HdlRoomLogic.Current.AddDevice(room, dicSelectDevice[deviceKey], true);
                foreach (var rowInf in dicGroupDevice.Values)
                {
                    //移除缓存
                    if (rowInf.listDeviceKeys.Contains(deviceKey) == true)
                    {
                        rowInf.listDeviceKeys.Remove(deviceKey);
                    }
                }
            }
            foreach (var scene in this.dicSelectScene.Values)
            {
                //添加场景
                HdlSceneLogic.Current.AddSceneToRoom(room, scene);
            }
            //清空缓存
            this.dicSelectScene.Clear();
            this.dicSelectDevice.Clear();
            //右上角的文字切换为 全选
            btnAllSelect.TextID = R.MyInternationalizationString.AllSelect;
            this.canSelectAll = true;
            //场景分支需要重新初始化
            this.DoInitSceneCaseControl();
            if (this.nowSelectDeviceInfo != null)
            {
                bool allHadDevice = true;
                foreach (var data in this.dicGroupDevice.Values)
                {
                    if (data.listDeviceKeys.Count == 0)
                    {
                        //有分支已经没有设备了
                        allHadDevice = false;
                        break;
                    }
                }
                //如果所有分支都还有设备的话,就刷新当前的列表即可
                if (allHadDevice == true)
                {
                    //初始化设备列表控件
                    this.InitListDeviceControls(this.nowSelectDeviceInfo);
                }
                else
                {
                    //如果存在分支已经没有设备了的话,那么它的菜单也需要删除掉,所以需要重新初始化
                    this.nowSelectDeviceInfo = null;
                    this.DoInitDeviceCaseControl();
                }
            }
            //隐藏 添加到 按钮
            this.frameAddBackGroud.Visible = false;
        }
        #endregion
        #region ■ 整合设备___________________________
        /// <summary>
        /// 获取分组后的设备
        /// </summary>
        /// <returns></returns>
        private Dictionary<string, DeviceRowInfo> GetAllGroupDevice()
        {
            //全部的设备
            var listDevice = HdlRoomLogic.Current.GetUnalloctedDevice();
            //根据设备所属类型排序
            listDevice = LocalDevice.Current.SortDeviceByBelongType(listDevice);
            var dic = new Dictionary<string, DeviceRowInfo>();
            foreach (var device in listDevice)
            {
                var typeInfo = LocalDevice.Current.GetDeviceBelongEnumInfo(device);
                //按所属ID分组
                if (dic.ContainsKey(typeInfo.BeloneText) == false)
                {
                    dic[typeInfo.BeloneText] = new DeviceRowInfo();
                    string path1 = string.Empty;
                    string path2 = string.Empty;
                    //获取图片
                    Common.LocalDevice.Current.GetDeviceFunctionTypeMenuIcon(typeInfo, ref path1, ref path2);
                    dic[typeInfo.BeloneText].IconPath = path1;
                    dic[typeInfo.BeloneText].IconPathSelected = path2;
                    dic[typeInfo.BeloneText].Text = typeInfo.BeloneText;
                }
                dic[typeInfo.BeloneText].listDeviceKeys.Add(LocalDevice.Current.GetDeviceMainKeys(device));
            }
            return dic;
        }
        #endregion
        #region ■ 界面关闭___________________________
        /// <summary>
        /// 界面关闭
        /// </summary>
        public override void CloseFormBefore()
        {
            //调用回调事件
            this.FormCloseEvent?.Invoke();
            this.FormCloseEvent = null;
            if (this.dataHadChanged == true)
            {
                HdlThreadLogic.Current.RunMainInThread(() =>
                {
                    //刷新主页
                    HomeMainPageForm.Instance?.RefreshBodyView();
                });
            }
            base.CloseFormBefore();
        }
        #endregion
        #region ■ 一般方法___________________________
        /// <summary>
        /// 检测各控件状态
        /// </summary>
        private void CheckControlsStatu(DeviceRowInfo rowInfo)
        {
            if (this.frameAddBackGroud == null)
            {
                //初始化添加到控件
                this.InitAddToControl();
            }
            if (dicSelectScene.Count == 0 && dicSelectDevice.Count == 0)
            {
                //隐藏 添加到 控件
                if (frameAddBackGroud.Visible == true)
                {
                    frameAddBackGroud.Visible = false;
                }
            }
            else
            {
                //显示 添加到 控件
                if (frameAddBackGroud.Visible == false)
                {
                    frameAddBackGroud.Visible = true;
                }
            }
            //当前选择的是场景分支
            if (rowInfo == null)
            {
                if (this.dicSelectScene.Count > 0)
                {
                    //右上角的文字切换为 取消
                    btnAllSelect.TextID = R.MyInternationalizationString.Cancel;
                    this.canSelectAll = false;
                }
                else
                {
                    //右上角的文字切换为 全选
                    btnAllSelect.TextID = R.MyInternationalizationString.AllSelect;
                    this.canSelectAll = true;
                }
            }
            //当前选择的是功能分支
            else
            {
                foreach (var deviceKey in rowInfo.listDeviceKeys)
                {
                    //如果当前的设备类型选择分支下,存在之前选择的设备的话
                    if (this.dicSelectDevice.ContainsKey(deviceKey) == true)
                    {
                        //右上角的文字切换为 取消
                        btnAllSelect.TextID = R.MyInternationalizationString.Cancel;
                        this.canSelectAll = false;
                        return;
                    }
                }
                //如果不存在的话,右上角的文字切换为 全选
                btnAllSelect.TextID = R.MyInternationalizationString.AllSelect;
                this.canSelectAll = true;
            }
        }
        #endregion
        #region ■ 结构体_____________________________
        /// <summary>
        /// 设备行信息
        /// </summary>
        private class DeviceRowInfo
        {
            /// <summary>
            /// 文本,目前用来做主键
            /// </summary>
            public string Text = string.Empty;
            /// <summary>
            /// 图标
            /// </summary>
            public string IconPath = string.Empty;
            /// <summary>
            /// 图标
            /// </summary>
            public string IconPathSelected = string.Empty;
            /// <summary>
            /// 设备回路主键
            /// </summary>
            public List<string> listDeviceKeys = new List<string>();
        }
        #endregion
    }
}