using System; using System.Collections.Generic; using Shared.Common; using Shared.Phone.UserCenter; namespace Shared.Phone.Device.CommonForm { public class SceneCategoryView : RowLayoutBase { #region ■ 变量声明___________________________ /// /// scene /// public SceneUI scene; /// /// room /// private Common.Room room; /// /// 延时时间 /// private NormalViewControl btnDelayTime; /// /// 延时图标 /// private IconViewControl btnDelayIcon; /// /// 场景图片控件 /// private ScenePictrueControl sceneContr = null; /// /// 是否已经完成控件初始化结束 /// private bool isInitControlFinish = false; #endregion #region ■ 初始化_____________________________ /// /// SceneCategoryView /// public SceneCategoryView() { this.Width = Application.GetRealWidth(1080); this.Height = Application.GetRealHeight(397 + 46); this.BackgroundColor = ZigbeeColor.Current.GXCGrayBackgroundColor; this.IsUseSameSubViewWidth = false; } /// /// 初始化 /// /// public void InitControl(SceneUI i_scene, Common.Room i_room) { this.RemoveAll(); this.LineColor = UserCenterColor.Current.Transparent; this.scene = i_scene; this.room = i_room; //自定义的场景图片控件 this.sceneContr = new ScenePictrueControl(); this.AddChidren(sceneContr); sceneContr.InitControl(this.scene); //场景点击 sceneContr.ButtonClickEvent += (sender, e) => { //不能反复点击 sceneContr.CanClick = false; this.SceneUpHandler(sceneContr); }; //收藏 sceneContr.AddCollectionControl(); sceneContr.CollectEvent += (collect) => { if (room.IsLove) { this.RemoveFromParent(); } }; //延时时间 this.btnDelayTime = new NormalViewControl(400, 58, true); btnDelayTime.X = Application.GetRealWidth(580); btnDelayTime.Y = Application.GetRealHeight(317); btnDelayTime.Text = this.GetTimeString(scene.SceneDelayTime); btnDelayTime.TextAlignment = TextAlignment.CenterRight; btnDelayTime.TextColor = ZigbeeColor.Current.GXCTextSelectedColor3; btnDelayTime.IsBold = true; this.AddChidren(btnDelayTime); //延时图标 this.btnDelayIcon = new IconViewControl(52); btnDelayIcon.X = Application.GetRealWidth(900); btnDelayIcon.Y = Application.GetRealHeight(30); btnDelayIcon.Width = this.GetPictrueRealSize(52); btnDelayIcon.Height = this.GetPictrueRealSize(52); btnDelayIcon.UnSelectedImagePath = "Scene/Delaying.png"; this.AddChidren(btnDelayIcon); btnDelayIcon.Visible = false; if (isInitControlFinish == true) { //编辑场景的回调函数会重新刷新控件 //所以这里不再初始化 return; } this.isInitControlFinish = true; //添加左边的空白区域 var btnTemp1 = new NormalViewControl(Application.GetRealWidth(58), sceneContr.btnScenePic.Height, false); this.AddLeftView(btnTemp1); //定时 var btnDelay = new NormalViewControl(Application.GetRealWidth(199), sceneContr.btnScenePic.Height, false); btnDelay.BackgroundColor = ZigbeeColor.Current.GXCTextSelectedColor; btnDelay.TextID = R.MyInternationalizationString.Delay; btnDelay.TextColor = ZigbeeColor.Current.GXCTextWhiteColor; btnDelay.TextAlignment = TextAlignment.Center; btnDelay.Tag = scene.SceneDelayTime; btnDelay.Radius = (uint)Application.GetRealHeight(17); btnDelay.SetCornerWithSameRadius(Application.GetRealHeight(17), HDLUtils.RectCornerTopLeft | HDLUtils.RectCornerTopRight | HDLUtils.RectCornerBottomLeft | HDLUtils.RectCornerBottomRight); this.AddLeftView(btnDelay); //变更按钮的高度 btnDelay.Height = sceneContr.btnScenePic.Height; btnDelay.Y = 0; //编辑 var btnEditor = new NormalViewControl(Application.GetRealWidth(199), sceneContr.btnScenePic.Height, false); btnEditor.BackgroundColor = ZigbeeColor.Current.GXCEditBackGroundColor; btnEditor.TextID = R.MyInternationalizationString.Edit; btnEditor.TextColor = ZigbeeColor.Current.GXCTextWhiteColor; btnEditor.TextAlignment = TextAlignment.Center; btnEditor.Tag = scene.SceneDelayTime; btnEditor.SetCornerWithSameRadius(Application.GetRealHeight(17), HDLUtils.RectCornerBottomLeft | HDLUtils.RectCornerTopLeft); //删除 var btnDelete = new NormalViewControl(Application.GetRealWidth(199), sceneContr.btnScenePic.Height, false); btnDelete.Tag = scene; btnDelete.BackgroundColor = ZigbeeColor.Current.GXCRedColor; btnDelete.TextID = R.MyInternationalizationString.Delete; btnDelete.TextColor = ZigbeeColor.Current.GXCTextWhiteColor; btnDelete.TextAlignment = TextAlignment.Center; btnDelete.SetCornerWithSameRadius(Application.GetRealHeight(17), HDLUtils.RectCornerTopRight | HDLUtils.RectCornerBottomRight); if (room.IsSharedRoom == false && room.IsLove == false) { //不是分享,并且不是收藏 this.AddRightView(btnEditor); this.AddRightView(btnDelete); //变更按钮的高度 btnEditor.Height = sceneContr.btnScenePic.Height; btnEditor.Y = 0; btnDelete.Height = sceneContr.btnScenePic.Height; btnDelete.Y = 0; //添加右边空白区域 var btnTemp2 = new NormalViewControl(Application.GetRealWidth(58), sceneContr.btnScenePic.Height, false); this.AddRightView(btnTemp2); } //删除场景 btnDelete.ButtonClickEvent += (sender, e) => { var alert = new ShowMsgControl(ShowMsgType.Confirm, Language.StringByID(R.MyInternationalizationString.ConfirmDelete)); alert.Show(); alert.ConfirmClickEvent += async () => { //如果当前住宅是虚拟住宅 if (Common.Config.Instance.Home.IsVirtually == true) { //移除缓存 HdlSceneLogic.Current.DeleteLocalScene(scene); RemoveFromParent(); return; } //0 移除失败 1 移除成功 2 没有该场景 var removeSceneAllData = await ZigBee.Device.Scene.DeleteSceneAsync(scene.Id); if (removeSceneAllData == null || removeSceneAllData.removeSceneData == null) { HdlMessageLogic.Current.ShowMassage(ShowMsgType.Error, Language.StringByID(R.MyInternationalizationString.RequestServerFailed)); return; } //1成功 if (removeSceneAllData.removeSceneData.Result == 1) { HdlSceneLogic.Current.DeleteLocalScene(scene); RemoveFromParent(); } //0 移除失败 else if (removeSceneAllData.removeSceneData.Result == 0) { HdlMessageLogic.Current.ShowMassage(ShowMsgType.Tip, Language.StringByID(R.MyInternationalizationString.FailedPleaseTryAgain)); return; } //2 没有该场景 else if (removeSceneAllData.removeSceneData.Result == 2) { HdlSceneLogic.Current.DeleteLocalScene(scene); RemoveFromParent(); return; } }; }; //编辑场景 btnEditor.ButtonClickEvent += (sender, e) => { //关闭左滑菜单 this.HideMenu(); //编辑场景 var form = new Phone.Category.AddOrEditorSceneForm(); form.AddForm(i_scene); form.SceneChangedEvent = (myScene, roomId) => { if (roomId != room.Id) { //它变更了房间 this.RemoveFromParent(); } else { this.InitControl(myScene, room); } }; }; //编辑延时 btnDelay.ButtonClickEvent += (sender, e) => { if (scene.RemainTime > 0) { HdlMessageLogic.Current.ShowMassage(ShowMsgType.Tip, Language.StringByID(R.MyInternationalizationString.TheSceneIsDelaying)); return; } var timeSelect = new SelectTime(); CommonPage.Instance.AddChidren(timeSelect); timeSelect.TempTime = scene.SceneDelayTime; timeSelect.Init(); timeSelect.TimeAction = (t) => { //隐藏右划菜单 this.HideMenu(); if (t != 0) { scene.SceneDelayTime = t; btnDelayTime.Text = this.GetTimeString(t); //编辑延时时,需要刷新主页 UserView.UserPage.Instance.RefreshAllForm = true; } }; }; } #endregion /// /// /// /// private async void SceneUpHandler(ScenePictrueControl sceneContr) { if (scene.SceneDelayTime <= 0 && scene.RemainTime <= 0) { //如果没有延迟的话,直接开启Loading特效 this.StartLoadingApreal(); } //调用场景 var result = await HdlSceneLogic.Current.ControlScene(scene); if (result == false) { sceneContr.CanClick = true; return; } scene.RemainTime = scene.SceneDelayTime; scene.SceneDelayTime = 0; if (scene.RemainTime <= 0) { sceneContr.CanClick = true; return; } //调用有延时的场景,需要刷新主页 UserView.UserPage.Instance.RefreshAllForm = true; int myRemainTime = scene.RemainTime; //开启内部延时时间线程(旨在全部地方的同一场景时间同步) HdlSceneLogic.Current.StartDelayTimeThread(scene); new System.Threading.Thread(() => { while (myRemainTime > 0 && this.Parent != null) { System.Threading.Thread.Sleep(1000); HdlThreadLogic.Current.RunMain(() => { SetTimeText(this.GetTimeString(scene.RemainTime)); }, ShowErrorMode.NO); myRemainTime--; } HdlThreadLogic.Current.RunMain(() => { if (this.Parent != null) { SetTimeImage(); //直接开启Loading特效 this.StartLoadingApreal(); sceneContr.CanClick = true; } }, ShowErrorMode.NO); }) { IsBackground = true }.Start(); } /// /// SetTimeText /// /// public void SetTimeText(string name) { btnDelayIcon.Visible = true; btnDelayTime.Text = name; } /// /// SetTimeImage /// public void SetTimeImage() { btnDelayIcon.Visible = false; btnDelayTime.Text = string.Empty; } /// /// 开启Loading特效 /// public void StartLoadingApreal() { //弄个遮罩遮住 var frameBack1 = new FrameLayout(); frameBack1.Y = sceneContr.btnScenePic.Y; frameBack1.X = sceneContr.btnScenePic.X; frameBack1.Width = sceneContr.btnScenePic.Width; frameBack1.Height = sceneContr.btnScenePic.Height; frameBack1.Radius = (uint)Application.GetRealHeight(17); frameBack1.BackgroundColor = 0xb3000000; this.AddChidren(frameBack1); var frameBack2 = new FrameLayout(); frameBack2.Y = sceneContr.btnSceneName.Y; frameBack2.X = sceneContr.btnSceneName.X; frameBack2.Width = sceneContr.btnSceneName.Width; frameBack2.Height = sceneContr.btnSceneName.Height; frameBack2.Radius = (uint)Application.GetRealHeight(17); frameBack2.BackgroundColor = 0xb3000000; this.AddChidren(frameBack2); //再加个转圈的 var loadContr = new MyProgressLoading(); loadContr.LoadingBackgroundColor = UserCenterColor.Current.Transparent; frameBack1.AddChidren(loadContr); loadContr.StartLoading(1000); loadContr.DisponeEvent += () => { frameBack1.RemoveFromParent(); frameBack2.RemoveFromParent(); }; } /// /// 获取场景延时字符串 /// /// /// private string GetTimeString(int second) { if (second == 0) { return null; } string timeStr = string.Empty; int hour = second / 3600; int minu = second % 3600 / 60; int sec = second % 60; if (hour > 0) { timeStr += $"{hour}{Language.StringByID(R.MyInternationalizationString.Hour)}"; if (minu > 0) { timeStr += $"{minu}{Language.StringByID(R.MyInternationalizationString.Minute)}"; } if (sec > 0) { timeStr += $"{sec}{Language.StringByID(R.MyInternationalizationString.Second)}"; } return timeStr; } else if (minu > 0) { timeStr += $"{minu}{Language.StringByID(R.MyInternationalizationString.Minute)}"; if (sec > 0) { timeStr += $"{sec}{Language.StringByID(R.MyInternationalizationString.Second)}"; } return timeStr; } else { return $"{sec}{Language.StringByID(R.MyInternationalizationString.Second)}"; } } /// /// 自定义控件(需要的它移除事件) /// private class MyProgressLoading : ProgressLoading { /// /// 控件销毁的事件 /// public Action DisponeEvent = null; /// /// 控件销毁 /// public override void RemoveFromParent() { base.RemoveFromParent(); this.DisponeEvent?.Invoke(); this.DisponeEvent = null; } } } }