xm
2020-05-07 c1de48884fa145a16a0f8bcee93274dcfaa0ff82
ZigbeeApp/Shared/Phone/UserCenter/SharedContent/AddNewSharedContentForm.cs
New file
@@ -0,0 +1,448 @@
using System;
using System.Collections.Generic;
using System.Text;
using ZigBee.Device;
namespace Shared.Phone.UserCenter.SharedContent
{
    /// <summary>
    /// 配置新共享内容的主界面
    /// </summary>
    public class AddNewSharedContentForm : EditorCommonForm
    {
        #region ■ 变量声明___________________________
        /// <summary>
        /// 查看的房间对象
        /// </summary>
        private Common.Room lookRoom = null;
        /// <summary>
        /// 成员的分享数据
        /// </summary>
        private MemberShardInfoData memberShardInfo = null;
        /// <summary>
        /// 设备桌布控件
        /// </summary>
        private FrameLayout frameDeviceTable = null;
        /// <summary>
        /// 设备桌布控件
        /// </summary>
        private FrameLayout frameSceneTable = null;
        /// <summary>
        /// 功能按钮
        /// </summary>
        private BottomClickButton btnShard = null;
        /// <summary>
        /// 选择的场景
        /// </summary>
        private Dictionary<int, Common.SceneUI> dicSelectScene = new Dictionary<int, Common.SceneUI>();
        /// <summary>
        /// 选择的设备
        /// </summary>
        private Dictionary<string, CommonDevice> dicSelectDevice = new Dictionary<string, CommonDevice>();
        /// <summary>
        /// 当前选择的分支 0:场景  1:功能
        /// </summary>
        private int nowSwitchIndex = 0;
        /// <summary>
        /// 当前选择的设备索引
        /// </summary>
        private string nowDeviceIndex = string.Empty;
        #endregion
        #region ■ 初始化_____________________________
        /// <summary>
        /// 画面显示(底层会固定调用此方法,借以完成画面创建)
        /// </summary>
        /// <param name="i_room">查看的房间对象</param>
        /// <param name="i_memberShardInfo">成员的分享数据</param>
        public void ShowForm(Common.Room i_room, MemberShardInfoData i_memberShardInfo)
        {
            this.lookRoom = i_room;
            this.memberShardInfo = i_memberShardInfo;
            //设置头部信息
            base.SetTitleText(Language.StringByID(R.MyInternationalizationString.uAddShared));
            //初始化中部信息
            this.InitMiddleFrame();
        }
        /// <summary>
        /// 初始化中部信息
        /// </summary>
        private void InitMiddleFrame()
        {
            //清空bodyFrame
            this.ClearBodyFrame();
            this.dicSelectDevice = new Dictionary<string, CommonDevice>();
            this.dicSelectScene = new Dictionary<int, Common.SceneUI>();
            //初始化桌布控件
            this.frameSceneTable = new FrameLayout();
            frameSceneTable.Y = Application.GetRealHeight(132);
            frameSceneTable.Height = bodyFrameLayout.Height - Application.GetRealHeight(132);
            bodyFrameLayout.AddChidren(frameSceneTable);
            this.frameDeviceTable = new FrameLayout();
            frameDeviceTable.Y = frameSceneTable.Y;
            frameDeviceTable.Height = frameSceneTable.Height;
            bodyFrameLayout.AddChidren(frameDeviceTable);
            frameDeviceTable.Visible = false;
            //初始化分支控件
            this.InitSwitchControl();
            //房间
            var btnRoom = new NormalViewControl(400, 63, true);
            btnRoom.Y = Application.GetRealHeight(40);
            btnRoom.X = bodyFrameLayout.Width - Application.GetRealWidth(58 + 400);
            btnRoom.Text = this.lookRoom.Name;
            btnRoom.TextAlignment = TextAlignment.CenterRight;
            bodyFrameLayout.AddChidren(btnRoom);
            //分享按钮
            this.btnShard = new BottomClickButton();
            btnShard.TextID = R.MyInternationalizationString.uShared2;
            bodyFrameLayout.AddChidren(btnShard);
            btnShard.Visible = false;
            btnShard.ButtonClickEvent += (sender, e) =>
            {
                //保存分享
                this.SaveShardData();
            };
            //初始化场景列表
            this.InitSceneList();
            //初始功能列表
            this.InitFunctionList();
        }
        /// <summary>
        /// 初始化分支控件
        /// </summary>
        private void InitSwitchControl()
        {
            var tabControl = new SceneFunctionSwitchControl();
            tabControl.Y = Application.GetRealHeight(40);
            bodyFrameLayout.AddChidren(tabControl);
            //设置初始化值
            tabControl.SetDefultIndex(nowSwitchIndex);
            tabControl.SelectTabEvent += (tabIndex) =>
            {
                this.nowSwitchIndex = tabIndex;
                if (tabIndex == 0)
                {
                    //显示场景列表
                    this.frameSceneTable.Visible = true;
                    this.frameDeviceTable.Visible = false;
                }
                else
                {
                    //显示功能列表
                    this.frameSceneTable.Visible = false;
                    this.frameDeviceTable.Visible = true;
                }
            };
            //开始初始化场景功能切换控件
            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 InitSceneList()
        {
            //清空桌布
            this.frameSceneTable.RemoveAll();
            //场景有点特殊,如果同一个房间内,已经分享了,则不再显示
            //如果这个场景是由嵌套而分享的,这个时候,它可以显示出来
            var listScene = new List<int>();
            if (memberShardInfo.dicShardRoom.ContainsKey(lookRoom.FileName) == false)
            {
                listScene.AddRange(lookRoom.ListSceneId);
            }
            else
            {
                var tempRoom = memberShardInfo.dicShardRoom[lookRoom.FileName];
                foreach (var dataId in lookRoom.ListSceneId)
                {
                    if (tempRoom.ListSceneId.Contains(dataId) == false)
                    {
                        listScene.Add(dataId);
                    }
                }
            }
            if (listScene.Count == 0)
            {
                //无可共享的场景
                this.ShowNotDataImage(frameSceneTable, Language.StringByID(R.MyInternationalizationString.uNotCanShardSceneMsg), "Item/NotShardPic.png", 383, 279);
                return;
            }
            HdlThreadLogic.Current.RunMainInThread(() =>
            {
                var listView = new VerticalFrameControl(3);
                listView.Y = Application.GetRealHeight(53);
                listView.Height = bodyFrameLayout.Height - Application.GetRealHeight(187);
                frameSceneTable.AddChidren(listView);
                foreach (var dataId in listScene)
                {
                    var data = HdlSceneLogic.Current.GetSceneUIBySceneId(dataId);
                    if (data == null)
                    {
                        continue;
                    }
                    //场景图片
                    var frameContr = new ScenePictrueControl();
                    listView.AddChidrenFrame(frameContr);
                    frameContr.InitControl(data);
                    var btnSelect = new IconViewControl(58);
                    btnSelect.UnSelectedImagePath = "Item/ItemUnSelected.png";
                    btnSelect.SelectedImagePath = "Item/ItemSelected.png";
                    btnSelect.X = Application.GetRealWidth(887);
                    btnSelect.Y = Application.GetRealHeight(35);
                    frameContr.AddChidren(btnSelect, ChidrenBindMode.BindEventOnly);
                    if (dicSelectScene.ContainsKey(data.Id) == true)
                    {
                        btnSelect.IsSelected = true;
                    }
                    frameContr.ButtonClickEvent += (sender, e) =>
                    {
                        //选择
                        btnSelect.IsSelected = !btnSelect.IsSelected;
                        if (btnSelect.IsSelected == true)
                        {
                            dicSelectScene[data.Id] = data;
                            if (this.btnShard.Visible == false)
                            {
                                this.btnShard.Visible = true;
                            }
                        }
                        else
                        {
                            dicSelectScene.Remove(data.Id);
                            if (dicSelectScene.Count == 0 && dicSelectDevice.Count == 0)
                            {
                                this.btnShard.Visible = false;
                            }
                        }
                    };
                }
                //调整一下高度
                listView.AdjustRealHeightByBottomButton(Application.GetRealHeight(185));
            });
        }
        #endregion
        #region ■ 功能显示___________________________
        /// <summary>
        /// 初始化功能列表
        /// </summary>
        private void InitFunctionList()
        {
            //清空桌布
            this.frameDeviceTable.RemoveAll();
            HdlThreadLogic.Current.RunMainInThread(() =>
            {
                //获取分组后的设备列表
                var dicGroupDevice = this.GetAllGroupDevice();
                if (dicGroupDevice.Count == 0)
                {
                    //无可共享的设备
                    this.ShowNotDataImage(frameDeviceTable, Language.StringByID(R.MyInternationalizationString.uNotCanShardDeviceMsg), "Item/NotShardPic.png", 383, 279);
                }
                else
                {
                    var frameBack = new FrameLayout();
                    frameBack.X = ControlCommonResourse.XXLeft;
                    frameBack.Y = Application.GetRealHeight(178);
                    frameBack.BackgroundColor = UserCenterColor.Current.White;
                    frameBack.Width = bodyFrameLayout.Width;
                    frameBack.Height = Application.GetRealHeight(1650);
                    frameBack.Radius = (uint)Application.GetRealHeight(58);
                    frameDeviceTable.AddChidren(frameBack);
                    var listView = new VerticalListControl(23);
                    listView.Y = Application.GetRealHeight(23);
                    listView.Height = Application.GetRealHeight(1437 - 23);
                    frameBack.AddChidren(listView);
                    //初始化设备类型行
                    this.InitDeviceObjectRow(dicGroupDevice, listView);
                }
            });
        }
        #endregion
        #region ■ 初始化设备类型行___________________
        /// <summary>
        /// 初始化设备类型行
        /// </summary>
        /// <param name="dicData"></param>
        /// <param name="listView"></param>
        private void InitDeviceObjectRow(Dictionary<int, List<CommonDevice>> dicData, VerticalListControl listView)
        {
            var scrolContr = new RoomDeviceGroupMenuControl(dicData);
            this.frameDeviceTable.AddChidren(scrolContr);
            //设置初始值
            scrolContr.SetDefultIndex(nowDeviceIndex);
            scrolContr.SelectDeviceEvent += (listdevice) =>
            {
                this.nowDeviceIndex = scrolContr.nowSelectKeys;
                //添加设备行
                this.AddDeviceRow(listdevice, listView);
            };
            scrolContr.InitControl();
        }
        #endregion
        #region ■ 添加设备行_________________________
        /// <summary>
        /// 添加设备行
        /// </summary>
        /// <param name="listDevice"></param>
        /// <param name="listView"></param>
        private void AddDeviceRow(List<CommonDevice> listDevice, VerticalListControl listView)
        {
            listView.RemoveAll();
            foreach (var device in listDevice)
            {
                var frameRow = new FrameRowControl(listView.rowSpace / 2);
                frameRow.LeftOffset = Application.GetRealWidth(46) - ControlCommonResourse.XXLeft;
                frameRow.RightOffset = -ControlCommonResourse.XXLeft;
                listView.AddChidren(frameRow);
                //图标
                var btnIcon = frameRow.AddLeftIcon(81);
                Common.LocalDevice.Current.SetDeviceIconToControl(btnIcon, device);
                //名称
                var btnView = frameRow.AddLeftCaption(string.Empty, 600);
                btnView.Text = Common.LocalDevice.Current.GetDeviceEpointName(device);
                btnView.TextSize = 15;
                //底线
                frameRow.AddBottomLine();
                //选择
                var btnSelect = frameRow.AddMostRightEmptyIcon(69, 69);
                btnSelect.UnSelectedImagePath = "Item/ItemUnSelected.png";
                btnSelect.SelectedImagePath = "Item/ItemSelected.png";
                string mainKeys = Common.LocalDevice.Current.GetDeviceMainKeys(device);
                if (dicSelectDevice.ContainsKey(mainKeys) == true)
                {
                    btnSelect.IsSelected = true;
                }
                frameRow.ButtonClickEvent += (sender, e) =>
                {
                    //选择
                    btnSelect.IsSelected = !btnSelect.IsSelected;
                    if (btnSelect.IsSelected == true)
                    {
                        dicSelectDevice[mainKeys] = device;
                        if (this.btnShard.Visible == false)
                        {
                            this.btnShard.Visible = true;
                        }
                    }
                    else
                    {
                        dicSelectDevice.Remove(mainKeys);
                        if (dicSelectScene.Count == 0 && dicSelectDevice.Count == 0)
                        {
                            this.btnShard.Visible = false;
                        }
                    }
                };
            }
            //列表自己有个23的Y轴坐标
            listView.AdjustRealHeightByBottomButton(Application.GetRealHeight(23), Application.GetRealHeight(300 - 23));
        }
        #endregion
        #region ■ 整合设备___________________________
        /// <summary>
        /// 获取分组后的设备
        /// </summary>
        /// <returns></returns>
        private Dictionary<int, List<CommonDevice>> GetAllGroupDevice()
        {
            //全部的设备
            var listDevice = HdlRoomLogic.Current.GetRoomListDevice(lookRoom);
            var dic = new Dictionary<int, List<CommonDevice>>();
            foreach (var device in listDevice)
            {
                if (memberShardInfo.dicAllShardKeys.ContainsKey(device.FilePath) == true)
                {
                    //如果已经分享了,则不显示
                    continue;
                }
                var typeInfo = Common.LocalDevice.Current.GetDeviceBelongEnumInfo(device);
                if (dic.ContainsKey(typeInfo.BeloneTextId) == false)
                {
                    dic[typeInfo.BeloneTextId] = new List<CommonDevice>();
                }
                dic[typeInfo.BeloneTextId].Add(device);
            }
            return dic;
        }
        #endregion
        #region ■ 保存分享___________________________
        /// <summary>
        /// 保存分享
        /// </summary>
        private void SaveShardData()
        {
            //选择的设备
            var listDevice = new List<CommonDevice>();
            foreach (var device in dicSelectDevice.Values)
            {
                listDevice.Add(device);
            }
            //选择的场景
            var listScene = new List<Common.SceneUI>();
            foreach (var scene in dicSelectScene.Values)
            {
                listScene.Add(scene);
            }
            HdlThreadLogic.Current.RunThread(async () =>
            {
                //上传文件
                var result = await HdlShardLogic.Current.DoUploadSharedContent(memberShardInfo, this.lookRoom, listDevice, listScene);
                if (result == true)
                {
                    HdlThreadLogic.Current.RunMain(() =>
                    {
                        //重新初始化界面
                        this.InitMiddleFrame();
                    });
                }
            });
        }
        #endregion
    }
}