using Shared.Common; using Shared.Phone.UserCenter; using System; using System.Collections.Generic; using System.Globalization; using ZigBee.Device; namespace Shared.Phone.Category { /// /// 添加或者编辑场景的界面 /// public class AddOrEditorSceneForm : EditorCommonForm { #region ■ 变量声明___________________________ /// /// 场景变更事件(场景,房间ID) /// public Action SceneChangedEvent = null; /// /// 修改的场景 /// private SceneUI editorScene = null; /// /// 克隆的场景(临时编辑用) /// private SceneUI cloneScene = null; /// /// 场景当前的房间ID /// private string nowRoomId = string.Empty; /// /// 当前界面上显示的执行目标 /// private List listAdjustTarget = null; /// /// 整个界面的上下滑动控件 /// private VerticalFrameControl listBodyControl = null; /// /// 添加目标的的容器控件 /// private FrameListControl frameTargetTableControl = null; /// /// 这个是加到【整个界面的上下滑动控件】中,促使界面能够滑动刚好超过【完成按钮】 /// private FrameLayout frameBottomTemp = null; /// /// 场景图片显示控件(生成图片文件使用) /// private ImageView btnScenePic = null; /// /// 场景图片是否变更(针对编辑模式) /// private bool isScenePictrueChanged = false; /// /// 执行目标是否改变(针对编辑模式) /// private bool isAdjustTargetChanged = false; #endregion #region ■ 初始化_____________________________ /// /// 画面显示(底层会固定调用此方法,借以完成画面创建) /// /// 编辑的场景对象 public void ShowForm(SceneUI i_editorScene) { this.ScrollEnabled = false; this.editorScene = i_editorScene; //克隆一个临时编辑的变量 this.cloneScene = new SceneUI(); if (i_editorScene != null) { cloneScene.Id = i_editorScene.Id; cloneScene.Name = i_editorScene.Name; cloneScene.IconPath = i_editorScene.IconPath; cloneScene.IconPathType = i_editorScene.IconPathType; var room = HdlRoomLogic.Current.GetRoomBySceneId(i_editorScene.Id); if (room != null) { //当前的房间 this.nowRoomId = room.Id; } //设置头部信息 base.SetTitleText(Language.StringByID(R.MyInternationalizationString.EditorScene)); } else { cloneScene.IconPath = "SceneIcon/0.png"; listAdjustTarget = new List(); //设置头部信息 base.SetTitleText(Language.StringByID(R.MyInternationalizationString.AddScence)); } //初始化中部信息 this.InitMiddleFrame(); } /// /// 初始化中部信息 /// private void InitMiddleFrame() { //整个界面的上下滑动控件 this.listBodyControl = new VerticalFrameControl(); listBodyControl.Height = bodyFrameLayout.Height; bodyFrameLayout.AddChidren(listBodyControl); //初始化场景图片 this.InitScenePictureControl(); //初始化信息编辑控件 this.InitInfoEditorControl(); //初始化添加目标 this.InitAddTargetControl(); //分享的场景不能保存 if (this.editorScene == null || this.editorScene.IsSharedScene == false) { //完成 var btnSave = new BottomClickButton(); btnSave.TextID = R.MyInternationalizationString.uFinish; bodyFrameLayout.AddChidren(btnSave); btnSave.ButtonClickEvent += (sender, e) => { //保存场景数据 this.SaveSceneData(); }; } } #endregion #region ■ 初始化场景图片_____________________ /// /// 初始化场景图片 /// private void InitScenePictureControl() { //场景图片这部分的白色背景 var framePicBack = new FrameLayout(); framePicBack.Height = Application.GetRealHeight(559); framePicBack.BackgroundColor = UserCenterColor.Current.White; listBodyControl.frameTable.AddChidren(framePicBack); //场景图片底部阴影 var btnShadow = new PicViewControl(916, 487); btnShadow.Y = Application.GetRealHeight(46); btnShadow.Gravity = Gravity.CenterHorizontal; btnShadow.UnSelectedImagePath = "Room/Room_Rectangle.png"; framePicBack.AddChidren(btnShadow); //场景图片 this.btnScenePic = new ImageView(); btnScenePic.Y = Application.GetRealHeight(46); btnScenePic.Width = this.GetPictrueRealSize(887); btnScenePic.Height = this.GetPictrueRealSize(444); btnScenePic.Radius = (uint)Application.GetRealHeight(17); btnScenePic.Gravity = Gravity.CenterHorizontal; if (this.editorScene == null) { btnScenePic.ImagePath = "SceneIcon/0.png"; } else if (this.editorScene.IconPathType == 0) { btnScenePic.ImagePath = this.editorScene.IconPath; } else { btnScenePic.ImageBytes = Global.ReadFileByHomeId(this.editorScene.IconPath); } framePicBack.AddChidren(btnScenePic); //图片遮罩 var btnZhezhao = new FrameLayout(); btnZhezhao.Width = btnScenePic.Width; btnZhezhao.Height = btnScenePic.Height; btnZhezhao.Y = btnScenePic.Y; btnZhezhao.Gravity = Gravity.CenterHorizontal; btnZhezhao.Radius = (uint)Application.GetRealHeight(17); btnZhezhao.BackgroundColor = UserCenterColor.Current.PictrueZhezhaoColor; framePicBack.AddChidren(btnZhezhao); //分享的场景不能编辑 if (this.editorScene == null || this.editorScene.IsSharedScene == false) { btnZhezhao.MouseUpEventHandler += (sender, e) => { //房间图片选择 this.ScenePictrueSelect(btnScenePic); }; } } #endregion #region ■ 初始化信息编辑_____________________ /// /// 初始化信息编辑控件 /// private void InitInfoEditorControl() { //白色背景框 var frameBack = new FrameLayout(); frameBack.Y = Application.GetRealHeight(582); frameBack.Height = Application.GetRealHeight(429); frameBack.BackgroundColor = UserCenterColor.Current.White; this.listBodyControl.frameTable.AddChidren(frameBack); //信息编辑 var btnTitle = new NormalViewControl(300, 60, true); btnTitle.X = ControlCommonResourse.XXLeft; btnTitle.Y = Application.GetRealHeight(46); btnTitle.TextSize = 15; btnTitle.TextID = R.MyInternationalizationString.uInfoEditor; btnTitle.TextColor = UserCenterColor.Current.TextColor2; frameBack.AddChidren(btnTitle); //场景名称 var rowScene = new FrameCaptionInputControl(Language.StringByID(R.MyInternationalizationString.SceneName), this.cloneScene.Name); rowScene.txtInput.PlaceholderText = Language.StringByID(R.MyInternationalizationString.PleaseInputSceneName); rowScene.Y = btnTitle.Bottom + Application.GetRealHeight(23); frameBack.AddChidren(rowScene); rowScene.InitControl(); //底线 rowScene.AddBottomLine(); rowScene.txtInput.TextChangeEventHandler += (sender, value) => { this.cloneScene.Name = value; }; //所属区域 var rowBelong = new BelongAreaControl(); rowBelong.Y = rowScene.Bottom + Application.GetRealHeight(14); frameBack.AddChidren(rowBelong); rowBelong.InitControl(Language.StringByID(R.MyInternationalizationString.uBelongArea), this.nowRoomId); //分享的场景不能编辑 if (this.editorScene == null || this.editorScene.IsSharedScene == false) { rowBelong.SelectRoomEvent += (selectId) => { this.nowRoomId = selectId; }; } } #endregion #region ■ 初始化添加目标_____________________ /// /// 初始化添加目标 /// private void InitAddTargetControl() { if (this.frameTargetTableControl == null || this.frameTargetTableControl.Parent == null) { //添加目标的的容器控件 this.frameTargetTableControl = new FrameListControl(); frameTargetTableControl.Y = Application.GetRealHeight(1034); frameTargetTableControl.BackgroundColor = UserCenterColor.Current.White; frameTargetTableControl.Height = Application.GetRealHeight(346); this.listBodyControl.frameTable.AddChidren(frameTargetTableControl); } else { this.frameTargetTableControl?.RemoveAll(); frameTargetTableControl.Height = Application.GetRealHeight(346); } //添加目标 var rowAddTarget = new FrameRowControl(frameTargetTableControl.rowSpace / 2); rowAddTarget.UseClickStatu = false; rowAddTarget.Y = Application.GetRealHeight(46 - 12); frameTargetTableControl.AddChidren(rowAddTarget); rowAddTarget.AddLeftCaption(Language.StringByID(R.MyInternationalizationString.AddScentTargetAction), 600); //+号 var btnAddIcon = rowAddTarget.AddMostRightEmptyIcon(61, 58); btnAddIcon.UnSelectedImagePath = "Item/Add.png"; //底线 rowAddTarget.AddBottomLine(); rowAddTarget.ButtonClickEvent += (sender, e) => { //显示添加目标菜单 this.ShowAddTargetMenu(); }; HdlThreadLogic.Current.RunThread(async () => { //从网关获取场景的执行目标 var result = await this.GetSceneTargetList(); if (result == true) { //添加【执行目标行】 this.AddTargetRow(); } }); } #endregion #region ■ 获取及添加【目标行】_______________ /// /// 添加【执行目标行】 /// private void AddTargetRow() { //检测网关上的数据是否和本地一致 for (int i = 0; i < this.listAdjustTarget.Count; i++) { if (listAdjustTarget[i].Type == 0) { //设备 var device = Common.LocalDevice.Current.GetDevice(listAdjustTarget[i].DeviceAddr, listAdjustTarget[i].Epoint); if (device == null) { //不显示这个不存在本地的设备 listAdjustTarget.RemoveAt(i); i--; } continue; } else if (listAdjustTarget[i].Type == 1) { //场景 var scene = HdlSceneLogic.Current.GetSceneUIBySceneId(listAdjustTarget[i].ElseScenesId); if (scene == null) { //不显示这个不存在本地的设备 listAdjustTarget.RemoveAt(i); i--; } continue; } } HdlThreadLogic.Current.RunMain(() => { for (int i = 0; i < listAdjustTarget.Count; i++) { if (listAdjustTarget[i].Type == 0) { //设备 this.AddDeviceTargetRow(listAdjustTarget[i], i, i != listAdjustTarget.Count - 1); } else if (listAdjustTarget[i].Type == 1) { //场景 this.AddSceneTargetRow(listAdjustTarget[i], i, i != listAdjustTarget.Count - 1); } else if (listAdjustTarget[i].Type == 2) { //延时 this.AddDelayTimeTargetRow(listAdjustTarget[i], i, i != listAdjustTarget.Count - 1); } } //初始化促使界面能够刚好滑动超过保存按钮的控件 this.InitFrameBottomTempControl(); //调整执行目标的桌布高度 this.AdjustTargetTableHeight(); }); } #endregion #region ■ 添加设备执行目标行_________________ /// /// 添加设备执行目标行 /// private void AddDeviceTargetRow(Scene.DeviceListData data, int index, bool addLine) { //设备 var device = Common.LocalDevice.Current.GetDevice(data.DeviceAddr, data.Epoint); var rowDevice = new DeviceRoomControl(device, frameTargetTableControl.rowSpace / 2); rowDevice.MainKeys = index.ToString(); this.frameTargetTableControl.AddChidren(rowDevice); //控件向右偏移 rowDevice.frameTable.LeftOffset = Application.GetRealWidth(104) - ControlCommonResourse.XXLeft; rowDevice.InitControl(); rowDevice.frameTable.UseClickStatu = false; //状态文本 string statuText2 = HdlSafeguardLogic.Current.GetAdjustTargetStatuText(data.TaskList); var btnStatu = rowDevice.frameTable.AddMostRightView(statuText2, 400); if (addLine == true) { //底线 rowDevice.frameTable.AddBottomLine(); } //分享的场景不能编辑 if (this.editorScene == null || this.editorScene.IsSharedScene == false) { //编辑 var btnEditor = rowDevice.AddEditorControl(); btnEditor.ButtonClickEvent += (sender, e) => { if (device.Type == DeviceType.DimmableLight//调光器 || device.Type == DeviceType.ColorDimmableLight)//彩灯 { var form = new UserCenter.Safety.AlarmTargetStatuSelectLightForm(); form.AddForm(device, data.TaskList); form.FinishSelectEvent += (statuText, listInfo) => { //执行目标已经改变 this.isAdjustTargetChanged = true; if (listInfo.Count == 0) { statuText = string.Empty; } btnStatu.Text = statuText; //将新的执行目标添加入缓存 data.TaskList.Clear(); data.TaskList.AddRange(listInfo); }; } else if (device.Type == DeviceType.Thermostat)//空调 { var form = new UserCenter.Safety.AlarmTargetStatuSelectAcForm(); form.AddForm(device, data.TaskList); form.FinishSelectEvent += (statuText, listInfo) => { //执行目标已经改变 this.isAdjustTargetChanged = true; if (listInfo.Count == 0) { statuText = string.Empty; } btnStatu.Text = statuText; //将新的执行目标添加入缓存 data.TaskList.Clear(); data.TaskList.AddRange(listInfo); }; } else if (device.Type == DeviceType.WindowCoveringDevice)//窗帘 { var form = new UserCenter.Safety.AlarmTargetStatuSelectCurtainForm(); form.AddForm(device, data.TaskList); form.FinishSelectEvent += (statuText, listInfo) => { //执行目标已经改变 this.isAdjustTargetChanged = true; if (listInfo.Count == 0) { statuText = string.Empty; } btnStatu.Text = statuText; //将新的执行目标添加入缓存 data.TaskList.Clear(); data.TaskList.AddRange(listInfo); }; } else { //其他直接归为开关类 var form = new UserCenter.Safety.AlarmTargetStatuSelectSwitchForm(); form.AddForm(device, data.TaskList); form.FinishSelectEvent += (statuText, listInfo) => { //执行目标已经改变 this.isAdjustTargetChanged = true; if (listInfo.Count == 0) { statuText = string.Empty; } btnStatu.Text = statuText; //将新的执行目标添加入缓存 data.TaskList.Clear(); data.TaskList.AddRange(listInfo); }; } }; //删除 var btnDelete = rowDevice.AddDeleteControl(); btnDelete.ButtonClickEvent += (sender, e) => { //隐藏右滑菜单 rowDevice.HideMenu(); //确认是否要删除? string msg = Language.StringByID(R.MyInternationalizationString.uShowDoDeleteMsg); this.ShowMassage(ShowMsgType.Confirm, msg, () => { //执行目标已经改变 this.isAdjustTargetChanged = true; //调整执行目标里面的全部坐标(删除的时候使用) this.AdjustTargetLocation(rowDevice.MainKeys); //移除 rowDevice.RemoveFromParent(); this.listAdjustTarget.Remove(data); //调整执行目标的桌布高度 this.AdjustTargetTableHeight(); }); }; } } #endregion #region ■ 添加场景执行目标行_________________ /// /// 添加场景执行目标行 /// private void AddSceneTargetRow(Scene.DeviceListData data, int index, bool addLine) { //场景 var scene = HdlSceneLogic.Current.GetSceneUIBySceneId(data.ElseScenesId); var rowScene = new SceneRoomControl(scene.Id, scene.Name, frameTargetTableControl.rowSpace / 2); rowScene.MainKeys = index.ToString(); frameTargetTableControl.AddChidren(rowScene); //控件向右偏移 rowScene.frameTable.LeftOffset = Application.GetRealWidth(104) - ControlCommonResourse.XXLeft; rowScene.InitControl(); if (addLine == true) { //底线 rowScene.frameTable.AddBottomLine(); } rowScene.frameTable.UseClickStatu = false; //分享的场景不能编辑 if (this.editorScene == null || this.editorScene.IsSharedScene == false) { //删除 var btnDelete = rowScene.AddDeleteControl(); btnDelete.ButtonClickEvent += (sender, e) => { //隐藏右滑菜单 rowScene.HideMenu(); //确认是否要删除? string msg = Language.StringByID(R.MyInternationalizationString.uShowDoDeleteMsg); this.ShowMassage(ShowMsgType.Confirm, msg, () => { //执行目标已经改变 this.isAdjustTargetChanged = true; //调整执行目标里面的全部坐标(删除的时候使用) this.AdjustTargetLocation(rowScene.MainKeys); //移除 rowScene.RemoveFromParent(); this.listAdjustTarget.Remove(data); //调整执行目标的桌布高度 this.AdjustTargetTableHeight(); }); }; } } #endregion #region ■ 添加延时行_________________________ /// /// 添加延时行 /// private void AddDelayTimeTargetRow(Scene.DeviceListData data, int index, bool addLine) { string hourText = Language.StringByID(R.MyInternationalizationString.Hour); string minuText = Language.StringByID(R.MyInternationalizationString.Minute); string secondText = Language.StringByID(R.MyInternationalizationString.Second); //行控件 var rowDelay = new RowLayoutControl(frameTargetTableControl.rowSpace / 2); rowDelay.MainKeys = index.ToString(); frameTargetTableControl.AddChidren(rowDelay); //控件向右偏移 rowDelay.frameTable.LeftOffset = Application.GetRealWidth(104) - ControlCommonResourse.XXLeft; rowDelay.frameTable.UseClickStatu = false; //图标 var btnIcon = rowDelay.frameTable.AddLeftIcon(); btnIcon.UnSelectedImagePath = "Item/Timer.png"; //延时 var btnDelay = rowDelay.frameTable.AddLeftCaption(Language.StringByID(R.MyInternationalizationString.Delay), 400); btnDelay.TextColor = UserCenterColor.Current.TextGrayColor3; //x小时x分钟x秒后 string timeStr = this.GetTimeString(data.DelayTime, hourText, minuText, secondText); timeStr += Language.StringByID(R.MyInternationalizationString.Later); var btnStatu = rowDelay.frameTable.AddMostRightView(timeStr, 300); if (addLine == true) { //底线 rowDelay.frameTable.AddBottomLine(); } //分享的场景不能编辑 if (this.editorScene == null || this.editorScene.IsSharedScene == false) { //编辑 var btnEditor = rowDelay.AddEditorControl(); btnEditor.ButtonClickEvent += (sender, e) => { //延时时间选择 var form = new AdjustTargetAddDelayTimeForm(); form.AddForm(data.DelayTime); form.FinishSelectEvent += (delayTime) => { //执行目标已经改变 this.isAdjustTargetChanged = true; data.DelayTime = delayTime; //x小时x分钟x秒后 timeStr = this.GetTimeString(data.DelayTime, hourText, minuText, secondText); btnStatu.Text = timeStr; }; }; //删除 var btnDelete = rowDelay.AddDeleteControl(); btnDelete.ButtonClickEvent += (sender, e) => { //隐藏右滑菜单 rowDelay.HideMenu(); //确认是否要删除? string msg = Language.StringByID(R.MyInternationalizationString.uShowDoDeleteMsg); this.ShowMassage(ShowMsgType.Confirm, msg, () => { //执行目标已经改变 this.isAdjustTargetChanged = true; //调整执行目标里面的全部坐标(删除的时候使用) this.AdjustTargetLocation(rowDelay.MainKeys); //移除 rowDelay.RemoveFromParent(); this.listAdjustTarget.Remove(data); //调整执行目标的桌布高度 this.AdjustTargetTableHeight(); }); }; } } /// /// 从网关获取场景的执行目标 /// /// private async System.Threading.Tasks.Task GetSceneTargetList() { if (this.editorScene == null || this.listAdjustTarget != null) { return true; } //打开进度条 this.ShowProgressBar(); //获取执行目标列表 var listData = await HdlSceneLogic.Current.GetAdjustTargetList(this.editorScene); if (listData == null) { this.CloseProgressBar(ShowReLoadMode.YES); return false; } this.listAdjustTarget = new List(); listAdjustTarget.AddRange(listData); this.CloseProgressBar(); return true; } #endregion #region ■ 初始化促使界面滑动控件_____________ /// /// 初始化促使界面能够刚好滑动超过保存按钮的控件 /// private void InitFrameBottomTempControl() { if (this.frameBottomTemp != null) { return; } //借用一下控件的Y轴 var btnTemp = new BottomClickButton(); //那个特殊的控件 this.frameBottomTemp = new FrameLayout(); frameBottomTemp.Height = bodyFrameLayout.Height - btnTemp.Yaxis + Application.GetRealHeight(23); this.listBodyControl.AddChidren(frameBottomTemp); } #endregion #region ■ 显示添加目标菜单___________________ /// /// 显示添加目标菜单 /// private void ShowAddTargetMenu() { var menuContr = new BottomMenuSelectForm(); menuContr.AddForm(3); //功能 menuContr.AddMenu(Language.StringByID(R.MyInternationalizationString.uFunction), () => { var form = new AdjustTargetAddDeviceForm(); form.AddForm(listAdjustTarget); form.FinishSelectEvent += (dicData) => { //执行目标已经改变 this.isAdjustTargetChanged = true; foreach (var mainKey in dicData.Keys) { var device = LocalDevice.Current.GetDevice(mainKey); var data = new Scene.DeviceListData(); data.Type = 0; data.DeviceAddr = device.DeviceAddr; data.Epoint = device.DeviceEpoint; data.TaskList = dicData[mainKey]; this.listAdjustTarget.Add(data); } //刷新列表控件 this.InitAddTargetControl(); }; }); //场景 menuContr.AddMenu(Language.StringByID(R.MyInternationalizationString.uScence), () => { var form = new AdjustTargetAddSceneForm(); form.AddForm(listAdjustTarget); form.FinishSelectEvent += (listSceneId) => { //执行目标已经改变 this.isAdjustTargetChanged = true; foreach (int sceneId in listSceneId) { var data = new Scene.DeviceListData(); data.Type = 1; data.ElseScenesId = sceneId; this.listAdjustTarget.Add(data); } //刷新列表控件 this.InitAddTargetControl(); }; }); //延时 menuContr.AddMenu(Language.StringByID(R.MyInternationalizationString.Delay), () => { //延时时间选择 var form = new AdjustTargetAddDelayTimeForm(); form.AddForm(0); form.FinishSelectEvent += (delayTime) => { //执行目标已经改变 this.isAdjustTargetChanged = true; var data = new Scene.DeviceListData(); data.Type = 2; data.DelayTime = delayTime; this.listAdjustTarget.Add(data); //刷新列表控件 this.InitAddTargetControl(); }; }); } #endregion #region ■ 保存场景数据_______________________ /// /// 保存场景数据 /// private void SaveSceneData() { //检测能否保存场景 if (this.CheckCanSaveScene() == false) { return; } HdlThreadLogic.Current.RunThread(() => { //打开进度条 this.ShowProgressBar(); //新建场景 if (this.editorScene == null) { //保存新建的场景 this.SaveSceneDataByNewMode(); } //编辑场景 else { //保存编辑的场景 this.SaveSceneDataByEditorMode(); } }); } /// /// 保存新建的场景 /// private async void SaveSceneDataByNewMode() { //添加场景 this.editorScene = await HdlSceneLogic.Current.AddNewSceneToGateway(this.cloneScene.Name, this.listAdjustTarget); //关闭进度条 this.CloseProgressBar(); if (editorScene == null) { return; } if (this.nowRoomId != string.Empty) { //添加房间 var newRoom = HdlRoomLogic.Current.GetRoomById(this.nowRoomId); HdlSceneLogic.Current.AddSceneToRoom(newRoom, this.editorScene); } if (this.cloneScene.IconPathType != 0) { //自定义图片 var tradeTime = DateTime.Now.ToString("yyyyMMddHHmmss"); var fileName = $"SceneIcon_{tradeTime}.png"; //生成文件图片 IO.FileUtils.WriteFileByBytes(System.IO.Path.Combine(Config.Instance.FullPath, fileName), this.btnScenePic.ImageBytes); HdlAutoBackupLogic.AddOrEditorFile(fileName); this.cloneScene.IconPath = fileName; } //转移属性 this.editorScene.Name = this.cloneScene.Name; this.editorScene.IconPathType = this.cloneScene.IconPathType; this.editorScene.IconPath = this.cloneScene.IconPath; this.editorScene.Save(); //新建场景,主页需要重新刷新 UserView.UserPage.Instance.RefreshForm = true; HdlThreadLogic.Current.RunMain(() => { //调用回调函数 this.SceneChangedEvent?.Invoke(this.editorScene, this.nowRoomId); this.CloseForm(); }); } /// /// 保存编辑的场景 /// private async void SaveSceneDataByEditorMode() { if (this.editorScene.Name != this.cloneScene.Name) { //修改名称 var result = await HdlSceneLogic.Current.EditorSceneNameFromGateway(this.editorScene, this.cloneScene.Name); if (result == false) { return; } } if (isAdjustTargetChanged == true) { //修改场景 var result = await HdlSceneLogic.Current.EditorSceneFromGateway(this.editorScene, this.listAdjustTarget); //关闭进度条 this.CloseProgressBar(); if (result == false) { return; } } if (this.nowRoomId != string.Empty) { //变更房间 HdlSceneLogic.Current.ChangedSceneRoom(this.editorScene, this.nowRoomId); } else { //移除出房间 var room = HdlRoomLogic.Current.GetRoomBySceneId(this.editorScene.Id); if (room != null) { HdlSceneLogic.Current.DeleteSceneFromRoom(room, this.editorScene); } } //图片改变了 if (isScenePictrueChanged == true) { if (this.editorScene.IconPathType != 0) { //删除自定义图片 Shared.IO.FileUtils.DeleteFile(System.IO.Path.Combine(Config.Instance.FullPath, this.editorScene.IconPath)); HdlAutoBackupLogic.DeleteFile(this.editorScene.IconPath); } if (this.cloneScene.IconPathType != 0) { //自定义图片 var tradeTime = DateTime.Now.ToString("yyyyMMddHHmmss"); var fileName = $"SceneIcon_{tradeTime}.png"; //生成文件图片 IO.FileUtils.WriteFileByBytes(System.IO.Path.Combine(Config.Instance.FullPath, fileName), this.btnScenePic.ImageBytes); HdlAutoBackupLogic.AddOrEditorFile(fileName); this.cloneScene.IconPath = fileName; } } //转移属性 this.editorScene.Name = this.cloneScene.Name; this.editorScene.IconPathType = this.cloneScene.IconPathType; this.editorScene.IconPath = this.cloneScene.IconPath; this.editorScene.Save(); //编辑场景,主页需要重新刷新 UserView.UserPage.Instance.RefreshForm = true; HdlThreadLogic.Current.RunMain(() => { //调用回调函数 this.SceneChangedEvent?.Invoke(this.editorScene, this.nowRoomId); this.CloseForm(); }); } /// /// 检测能否保存场景 /// /// private bool CheckCanSaveScene() { if (this.cloneScene.Name == string.Empty) { //场景名不能为空 this.ShowMassage(ShowMsgType.Remind, Language.StringByID(R.MyInternationalizationString.SceneNameCannotBeNull)); return false; } bool hadTarget = false; foreach (var data in this.listAdjustTarget) { if (data.Type == 0 || data.Type == 1) { //拥有执行目标 hadTarget = true; break; } } if (hadTarget == false) { //请添加执行目标 this.ShowMassage(ShowMsgType.Remind, Language.StringByID(R.MyInternationalizationString.uPleaseAddAdjustTarget)); return false; } return true; } #endregion #region ■ 场景图片选择_______________________ /// /// 场景图片选择 /// /// private void ScenePictrueSelect(ImageView imageContr) { var menuContr = new BottomMenuSelectForm(); menuContr.AddForm(3); //默认图库 menuContr.AddMenu(Language.StringByID(R.MyInternationalizationString.LocalPicture), () => { var form = new SelectLocalSceneImageForm(); form.AddForm(); form.FinishSelectEvent = (imgPath) => { if (string.IsNullOrEmpty(imgPath) == true) { return; } this.cloneScene.IconPathType = 0; this.cloneScene.IconPath = imgPath; imgPath = IO.FileUtils.GetImageFilePath(imgPath); imageContr.ImageBytes = IO.FileUtils.ReadFile(imgPath); //场景图片已经改变 this.isScenePictrueChanged = true; }; }); //拍照 menuContr.AddMenu(Language.StringByID(R.MyInternationalizationString.Photograph), () => { //通过相机拍照裁剪 CropImage.TakePicture((imagePath) => { if (string.IsNullOrEmpty(imagePath) == true) { return; } this.cloneScene.IconPathType = 1; imageContr.ImageBytes = Shared.IO.FileUtils.ReadFile(imagePath); System.IO.File.Delete(imagePath); //场景图片已经改变 this.isScenePictrueChanged = true; }, "HdlPic", 2, 1); }); //我的相册 menuContr.AddMenu(Language.StringByID(R.MyInternationalizationString.MyAblums), () => { //从相册选择图片裁剪 CropImage.SelectPicture((imagePath) => { if (string.IsNullOrEmpty(imagePath) == true) { return; } this.cloneScene.IconPathType = 2; imageContr.ImageBytes = Shared.IO.FileUtils.ReadFile(imagePath); System.IO.File.Delete(imagePath); //场景图片已经改变 this.isScenePictrueChanged = true; }, "HdlPic", 2, 1); }); } #endregion #region ■ 界面关闭___________________________ /// /// 界面关闭 /// public override void CloseFormBefore() { this.SceneChangedEvent = null; base.CloseFormBefore(); } #endregion #region ■ 一般方法___________________________ /// /// 获取时间的翻译文本 /// /// /// 小时的文本 /// 分的文本 /// 秒的文本 /// private string GetTimeString(int second, string hourText, string minuText, string secondText) { string timeStr = string.Empty; int hour = second / 3600; int minu = second % 3600 / 60; int sec = second % 60; if (hour > 0) { timeStr += hour + hourText; } if (minu > 0) { timeStr += minu + minuText; } if (sec > 0) { timeStr += sec + secondText; } return timeStr; } /// /// 调整执行目标的桌布高度 /// private void AdjustTargetTableHeight() { //调整桌布高度 int minHeight = Application.GetRealHeight(346); int realHeight = frameTargetTableControl.GetChildren(frameTargetTableControl.ChildrenCount - 1).Bottom; realHeight += Application.GetRealHeight(23); if (realHeight > minHeight) { frameTargetTableControl.Height = realHeight; } else if (frameTargetTableControl.Height != minHeight) { frameTargetTableControl.Height = minHeight; } //这个特殊的东西必须放在执行目标容器的底部 this.frameBottomTemp.Y = frameTargetTableControl.Bottom; //调整全局上下滑动控件的桌布高度 this.listBodyControl.AdjustTableHeight(); } /// /// 调整执行目标里面的全部坐标(删除的时候使用) /// /// 删除的主键 private void AdjustTargetLocation(string mainKey) { bool canChanged = false; int YY = 0; for (int i = 0; i < frameTargetTableControl.ChildrenCount; i++) { var myRow = frameTargetTableControl.GetChildren(i); if (canChanged == false && (myRow is RowLayoutControl)) { if (((RowLayoutControl)myRow).MainKeys == mainKey) { //已经到达要删除的索引 canChanged = true; YY = frameTargetTableControl.GetChildren(i).Y; } continue; } if (canChanged == true) { //它下面的行全部往上移 myRow.Y = YY; YY = myRow.Bottom; } } } #endregion } }