using System; using System.Collections.Generic; using System.Text; using ZigBee.Device; namespace Shared.Phone.UserCenter.SharedContent { /// /// 配置新共享内容的主界面 /// public class AddNewSharedContentForm : EditorCommonForm { #region ■ 变量声明___________________________ /// /// 查看的房间对象 /// private Common.Room lookRoom = null; /// /// 成员ID /// private string ChildAccountId = string.Empty; /// /// 设备桌布控件 /// private NormalFrameLayout frameDeviceTable = null; /// /// 设备桌布控件 /// private NormalFrameLayout frameSceneTable = null; /// /// 功能按钮 /// private BottomClickButton btnShard = null; /// /// 选择的场景 /// private Dictionary dicSelectScene = new Dictionary(); /// /// 选择的设备 /// private Dictionary dicSelectDevice = new Dictionary(); /// /// 当前选择的分支 0:场景 1:功能 /// private int nowSwitchIndex = 0; /// /// 当前选择的设备索引 /// private string nowDeviceIndex = string.Empty; #endregion #region ■ 初始化_____________________________ /// /// 画面显示(底层会固定调用此方法,借以完成画面创建) /// /// 查看的房间对象 /// 成员ID public void ShowForm(Common.Room i_room, string i_ChildAccountId) { this.lookRoom = i_room; this.ChildAccountId = i_ChildAccountId; //设置头部信息 base.SetTitleText(Language.StringByID(R.MyInternationalizationString.uAddShared)); //初始化中部信息 this.InitMiddleFrame(); } /// /// 初始化中部信息 /// private void InitMiddleFrame() { //清空bodyFrame this.ClearBodyFrame(); this.dicSelectDevice = new Dictionary(); this.dicSelectScene = new Dictionary(); //初始化桌布控件 this.frameSceneTable = new NormalFrameLayout(); frameSceneTable.Y = Application.GetRealHeight(132); frameSceneTable.Height = bodyFrameLayout.Height - Application.GetRealHeight(132); bodyFrameLayout.AddChidren(frameSceneTable); this.frameDeviceTable = new NormalFrameLayout(); 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(); } /// /// 初始化分支控件 /// 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(); listTitle.Add(Language.StringByID(R.MyInternationalizationString.uScence)); listTitle.Add(Language.StringByID(R.MyInternationalizationString.uFunction)); tabControl.InitControl(listTitle); } #endregion #region ■ 场景显示___________________________ /// /// 初始化场景列表 /// private void InitSceneList() { //清空桌布 this.frameSceneTable.RemoveAll(); //场景有点特殊,如果同一个房间内,已经分享了,则不再显示 //如果这个场景是由嵌套而分享的,这个时候,它可以显示出来 var listScene = new List(); var shardRoom = HdlShardLogic.Current.GetShardRoomFromMemory(lookRoom.Id); if (shardRoom == null) { listScene.AddRange(lookRoom.ListSceneId); } else { foreach (var dataId in lookRoom.ListSceneId) { if (shardRoom.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.AddChidren(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.BindEvent); 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 ■ 功能显示___________________________ /// /// 初始化功能列表 /// 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 = HdlControlResourse.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 ■ 初始化设备类型行___________________ /// /// 初始化设备类型行 /// /// /// private void InitDeviceObjectRow(Dictionary> 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 ■ 添加设备行_________________________ /// /// 添加设备行 /// /// /// private void AddDeviceRow(List listDevice, VerticalListControl listView) { listView.RemoveAll(); foreach (var device in listDevice) { var frameRow = new FrameRowControl(listView.rowSpace / 2); frameRow.LeftOffset = Application.GetRealWidth(46) - HdlControlResourse.XXLeft; frameRow.RightOffset = -HdlControlResourse.XXLeft; listView.AddChidren(frameRow); //图标 var btnIcon = frameRow.AddLeftIcon(81); HdlDeviceCommonLogic.Current.SetDeviceIconToControl(btnIcon, device); //名称 var btnView = frameRow.AddLeftCaption(string.Empty, 600); btnView.Text = HdlDeviceCommonLogic.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 = HdlDeviceCommonLogic.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 ■ 整合设备___________________________ /// /// 获取分组后的设备 /// /// private Dictionary> GetAllGroupDevice() { //全部的设备 var listDevice = HdlRoomLogic.Current.GetRoomListDevice(lookRoom); var dic = new Dictionary>(); var shardRoom = HdlShardLogic.Current.GetShardRoomFromMemory(lookRoom.Id); foreach (var device in listDevice) { string mainkey = HdlDeviceCommonLogic.Current.GetDeviceMainKeys(device); if (shardRoom.ListDevice.Contains(mainkey) == true) { //如果已经分享了,则不显示 continue; } var typeInfo = HdlDeviceCommonLogic.Current.GetDeviceBelongEnumInfo(device); if (dic.ContainsKey(typeInfo.BeloneText) == false) { dic[typeInfo.BeloneText] = new List(); } dic[typeInfo.BeloneText].Add(device); } return dic; } #endregion #region ■ 保存分享___________________________ /// /// 保存分享 /// private void SaveShardData() { //选择的设备 var listDevice = new List(); foreach (var device in dicSelectDevice.Values) { listDevice.Add(device); } //选择的场景 var listScene = new List(); foreach (var scene in dicSelectScene.Values) { listScene.Add(scene); } HdlThreadLogic.Current.RunThread(() => { //上传文件 var result = HdlShardLogic.Current.UploadSharedContent(this.ChildAccountId, this.lookRoom, listDevice, listScene); if (result == true) { HdlThreadLogic.Current.RunMain(() => { //重新初始化界面 this.InitMiddleFrame(); }); } }); } #endregion } }