From 25429f085093d89d543a0b90e30d0d62d1b7dac9 Mon Sep 17 00:00:00 2001 From: hxb <hxb@hdlchina.com.cn> Date: 星期二, 30 八月 2022 09:37:38 +0800 Subject: [PATCH] 合并了IOS的代码 --- ZigbeeApp/Shared/Phone/UserCenter/Residence/AddNewRoomForm.cs | 485 +++++++++++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 447 insertions(+), 38 deletions(-) diff --git a/ZigbeeApp/Shared/Phone/UserCenter/Residence/AddNewRoomForm.cs b/ZigbeeApp/Shared/Phone/UserCenter/Residence/AddNewRoomForm.cs index bd256dd..e61460f 100755 --- a/ZigbeeApp/Shared/Phone/UserCenter/Residence/AddNewRoomForm.cs +++ b/ZigbeeApp/Shared/Phone/UserCenter/Residence/AddNewRoomForm.cs @@ -12,9 +12,13 @@ #region 鈻� 鍙橀噺澹版槑___________________________ /// <summary> + /// 瀹屾垚娣诲姞鎴块棿鐨勪簨浠� + /// </summary> + public Action FinishEditorEvent = null; + /// <summary> /// 鍒楄〃鎺т欢 /// </summary> - private VerticalListControl listview = null; + private FrameListControl listview = null; /// <summary> /// 妤煎眰涓婚敭 /// </summary> @@ -50,22 +54,58 @@ //娓呯┖bodyFrame this.ClearBodyFrame(); - var btnPic = new PicViewControl(887, 444); + var listBackControl = new VerticalFrameControl(); + listBackControl.Height = bodyFrameLayout.Height; + bodyFrameLayout.AddChidren(listBackControl); + + //鍔犱竴涓櫧鑹茶儗鏅� + var frameBack1 = new FrameLayout(); + frameBack1.Height = Application.GetRealHeight(750); + frameBack1.Y = Application.GetRealHeight(196); + frameBack1.BackgroundColor = UserCenterColor.Current.White; + frameBack1.SetCornerWithSameRadius(Application.GetRealHeight(58), HDLUtils.RectCornerTopLeft | HDLUtils.RectCornerTopRight); + listBackControl.frameTable.AddChidren(frameBack1); + + //鎴块棿鍥剧墖搴曢儴闃村奖 + var btnShadow = new PicViewControl(853, 593); + btnShadow.Y = Application.GetRealHeight(58); + btnShadow.Gravity = Gravity.CenterHorizontal; + btnShadow.UnSelectedImagePath = "Room/RoomShadow.png"; + listBackControl.frameTable.AddChidren(btnShadow); + //鎴块棿鍥剧墖 + var btnPic = new ImageView(); btnPic.Y = Application.GetRealHeight(60); + btnPic.Width = this.GetPictrueRealSize(824); + btnPic.Height = this.GetPictrueRealSize(549); + btnPic.Radius = (uint)Application.GetRealHeight(17); btnPic.Gravity = Gravity.CenterHorizontal; - btnPic.UnSelectedImagePath = "Room/r0.png"; - bodyFrameLayout.AddChidren(btnPic); + btnPic.ImagePath = "RoomIcon/0.jpg"; + listBackControl.frameTable.AddChidren(btnPic); + //鍥剧墖閬僵 + var btnZhezhao = new FrameLayout(); + btnZhezhao.Width = btnPic.Width; + btnZhezhao.Height = btnPic.Height; + btnZhezhao.Y = btnPic.Y; + btnZhezhao.Gravity = Gravity.CenterHorizontal; + btnZhezhao.Radius = (uint)Application.GetRealHeight(17); + btnZhezhao.BackgroundColor = UserCenterColor.Current.PictrueZhezhaoColor; + listBackControl.frameTable.AddChidren(btnZhezhao); + btnZhezhao.MouseUpEventHandler += (sender, e) => + { + //鎴块棿鍥剧墖閫夋嫨 + this.RoomPictrueSelect(btnPic); + }; this.newRoom = new Common.Room(); newRoom.FloorId = this.floorKeys; - newRoom.BackgroundImage = btnPic.UnSelectedImagePath; + newRoom.BackgroundImage = btnPic.ImagePath; - //鍒濆鍖栨甯� + //鍒濆鍖栦俊鎭甯� var tableContr = new InformationEditorControl(); - this.listview = tableContr.InitControl(bodyFrameLayout, Language.StringByID(R.MyInternationalizationString.uInfoEditor), 562, 1175); + this.listview = tableContr.InitControl(listBackControl.frameTable, Language.StringByID(R.MyInternationalizationString.uInfoEditor), bodyFrameLayout.Height - btnShadow.Bottom, false); //娣诲姞鍏ㄩ儴鑿滃崟 - this.AddAllMenuRow(tableContr); + this.AddAllMenuRow(tableContr, btnPic); } #endregion @@ -75,29 +115,34 @@ /// <summary> /// 娣诲姞鍏ㄩ儴鑿滃崟 /// </summary> - private void AddAllMenuRow(InformationEditorControl tableContr) + private void AddAllMenuRow(InformationEditorControl tableContr, ImageView btnPic) { //銆愭埧闂村悕绉般�� var txtRoomName = new FrameCaptionInputControl(Language.StringByID(R.MyInternationalizationString.uRoomName), string.Empty, this.listview.rowSpace / 2); txtRoomName.txtInput.PlaceholderText = Language.StringByID(R.MyInternationalizationString.uPleaseInputRoomName); + txtRoomName.txtInput.MaxByte = 48;//闄愬埗鍙兘杈撳叆48涓瓧鑺� listview.AddChidren(txtRoomName); txtRoomName.InitControl(); //搴曠嚎 txtRoomName.AddBottomLine(); - //銆愭墍灞炴ゼ灞傘�� - var btnBelone = new FrameCaptionViewControl(Language.StringByID(R.MyInternationalizationString.uBelongeFloor), Common.Config.Instance.Home.FloorDics[this.floorKeys], this.listview.rowSpace / 2); - listview.AddChidren(btnBelone); - btnBelone.InitControl(); - //鍙崇澶� - btnBelone.AddRightArrow(); - //搴曠嚎 - btnBelone.AddBottomLine(); - btnBelone.ButtonClickEvent += (sender, e) => + //璇PP涓烘湁妤煎眰鐨勬ā寮忔墠寮�鍚繖涓彍鍗� + if (floorKeys != string.Empty) { - //妤煎眰閫夋嫨 - this.ShowSelectFloor(btnBelone); - }; + //銆愭墍灞炴ゼ灞傘�� + var btnBelone = new FrameCaptionViewControl(Language.StringByID(R.MyInternationalizationString.uBelongeFloor), Common.Config.Instance.Home.FloorDics[this.floorKeys], this.listview.rowSpace / 2); + listview.AddChidren(btnBelone); + btnBelone.InitControl(); + //鍙崇澶� + btnBelone.AddRightArrow(); + //搴曠嚎 + btnBelone.AddBottomLine(); + btnBelone.ButtonClickEvent += (sender, e) => + { + //妤煎眰閫夋嫨 + this.ShowSelectFloor(btnBelone); + }; + } //銆愭俯搴︺�� var rowTemperature = new FrameRowControl(this.listview.rowSpace / 2); @@ -110,6 +155,8 @@ rowTemperature.AddBottomLine(); rowTemperature.ButtonClickEvent += (sender, e) => { + //鏄剧ず娓╁害浼犳劅鍣ㄥ垪琛� + this.ShowTemperatrueDevice(btnTemper); }; //銆愭箍搴︺�� @@ -123,10 +170,12 @@ rowHumidity.AddBottomLine(); rowHumidity.ButtonClickEvent += (sender, e) => { + //鏄剧ず婀垮害浼犳劅鍣ㄥ垪琛� + this.ShowHumidityDevice(btnHumi); }; //鍒濆鍖栨甯冨畬鎴� - tableContr.FinishInitControl(bodyFrameLayout, this.listview); + tableContr.FinishInitControl(); tableContr = null; //淇濆瓨 var btnFinish = new BottomClickButton(); @@ -140,16 +189,26 @@ { return; } - var result = newRoom.AddRoom(newRoom); - if (result == false) + if (newRoom.BackgroundImageType == 1 || newRoom.BackgroundImageType == 2) { - //鎻愮ず鐢ㄦ埛娣诲姞澶辫触 - this.ShowMassage(ShowMsgType.Error, Language.StringByID(R.MyInternationalizationString.FAIL)); + //鐢熸垚鍥剧墖 + string picName = $"RoomIcon_{DateTime.Now.ToString("yyyyMMddHHmmss")}.png"; + string picFullName = System.IO.Path.Combine(Common.Config.Instance.FullPath, picName); + Shared.IO.FileUtils.WriteFileByBytes(picFullName, btnPic.ImageBytes); + newRoom.BackgroundImage = picName; + //澶囦唤 + Phone.UserCenter.HdlAutoBackupLogic.AddOrEditorFile(picName); } - else - { - this.CloseForm(); - } + + newRoom.FloorId = this.floorKeys; + + //娣诲姞鎴块棿,涓婚〉闇�瑕侀噸鏂板埛鏂� + UserView.UserPage.Instance.RefreshAllForm = true; + + HdlRoomLogic.Current.AddRoom(newRoom); + this.FinishEditorEvent?.Invoke(); + + this.CloseForm(); }; } @@ -163,7 +222,7 @@ /// <param name="control"></param> private void ShowSelectFloor(FrameCaptionViewControl control) { - var dicFloor = Common.Room.CurrentRoom.GetFloorSortList(); + var dicFloor = HdlRoomLogic.Current.GetFloorSortList(); var listKeys = new List<string>(); var listName = new List<string>(); @@ -191,6 +250,349 @@ #endregion + #region 鈻� 娓╁害浼犳劅鍣ㄧ浉鍏砡____________________ + + /// <summary> + /// 鏄剧ず娓╁害浼犳劅鍣ㄥ垪琛� + /// </summary> + /// <param name="btnTemper"></param> + private void ShowTemperatrueDevice(NormalViewControl btnTemper) + { + var listDevice = new List<ZigBee.Device.CommonDevice>(); + foreach (var device in Common.LocalDevice.Current.listAllDevice) + { + //鑾峰彇娓╁害浼犳劅鍣� + if (device is ZigBee.Device.TemperatureSensor && ((ZigBee.Device.TemperatureSensor)device).SensorDiv == 1) + { + listDevice.Add(device); + } + //PM2.5鏄俯搴﹀拰婀垮害鍚堝湪鍚屼竴涓鐐� + else if (device.Type == ZigBee.Device.DeviceType.PMSensor) + { + listDevice.Add(device); + } + } + var listSelect = new List<string>() { newRoom.TemperatrueDevice }; + var form = new SelectDeviceForm(); + form.AddForm(listDevice, listSelect, true, true); + form.ActionSelectDevice += (list) => + { + if (list.Count == 0) + { + newRoom.TemperatrueDevice = string.Empty; + btnTemper.Text = Language.StringByID(R.MyInternationalizationString.uNothing); + return; + } + newRoom.TemperatrueDevice = Common.LocalDevice.Current.GetDeviceMainKeys(list[0]); + //鑾峰彇娓╁害鍊� + this.GetTemperatrueValue(btnTemper, newRoom.TemperatrueDevice); + }; + } + + /// <summary> + /// 鑾峰彇娓╁害鍊� + /// </summary> + /// <param name="btnHumi"></param> + /// <param name="deviceKey"></param> + private void GetTemperatrueValue(NormalViewControl btnTemper, string deviceKey) + { + var device = Common.LocalDevice.Current.GetDevice(deviceKey); + if (device == null) + { + return; + } + //鑾峰彇涓� + btnTemper.Text = Language.StringByID(R.MyInternationalizationString.Getting); + + bool receiveData = false; + HdlGatewayReceiveLogic.Current.RemoveEvent("TemperatrueDevice"); + HdlGatewayReceiveLogic.Current.AddAttributeEvent("TemperatrueDevice", ReceiveComandDiv.A璁惧灞炴�т笂鎶�, ((report) => + { + string mainKeys = Common.LocalDevice.Current.GetDeviceMainKeys(report); + if (newRoom.TemperatrueDevice != mainKeys || btnTemper == null + || report.DeviceStatusReport.CluterID != 1026) + { + return; + } + receiveData = true; + + HdlThreadLogic.Current.RunMain(() => + { + decimal temperatrue = (decimal)device.GetType().InvokeMember("currentTemperature", System.Reflection.BindingFlags.GetField, null, device, null); + if (temperatrue == 0) + { + //0 + btnTemper.Text = "0.0鈩�"; + } + else + { + btnTemper.Text = temperatrue + "鈩�"; + } + + }, ShowErrorMode.NO); + + })); + //鍙戦�佽幏鍙栨俯搴︾殑鍛戒护 + device.ReadAttri(ZigBee.Device.Cluster_ID.TemperatureMeasurement, ZigBee.Device.AttriButeId.MeasuredValue); + + HdlThreadLogic.Current.RunThread(() => + { + //鍘昏幏鍙栬澶囧垪琛ㄧ殑淇℃伅 + System.Threading.Thread.Sleep(1500); + var result = Common.LocalDevice.Current.ReadDeviceEpointDeviceInfo(device); + if (result != null) + { + device.AttributeStatus.Clear(); + device.AttributeStatus.AddRange(result.AttributeStatus); + device.ReSave(); + } + if (receiveData == true) + { + //宸茬粡璇诲彇鍒版暟鎹� + return; + } + + foreach (var data in device.AttributeStatus) + { + if (data.ClusterId == 1026 + && data.AttributeId == (int)ZigBee.Device.AttriButeId.MeasuredValue) + { + //澶勭悊缃戝叧杩斿洖鐨勬俯搴﹀�� + decimal temperatrue = Common.LocalDevice.Current.AdjustTemperatrueValue(data.AttributeData); + + device.GetType().InvokeMember("currentTemperature", System.Reflection.BindingFlags.SetField, null, device, new object[] { temperatrue }); + device.ReSave(); + + //鍒朵綔铏氬亣鐨勫睘鎬т笂鎶� + var report = new ZigBee.Device.CommonDevice { DeviceAddr = device.DeviceAddr, DeviceEpoint = device.DeviceEpoint }; + report.DeviceStatusReport.CluterID = 1026; + HdlGatewayReceiveLogic.Current.DeviceReportPush(report, ReceiveComandDiv.A璁惧灞炴�т笂鎶�); + + HdlThreadLogic.Current.RunMain(() => + { + btnTemper.Text = temperatrue == 0 ? "0.0鈩�" : temperatrue.ToString() + "鈩�"; + }); + break; + } + } + }); + } + + #endregion + + #region 鈻� 婀垮害浼犳劅鍣ㄧ浉鍏砡____________________ + + /// <summary> + /// 鏄剧ず婀垮害浼犳劅鍣ㄥ垪琛� + /// </summary> + /// <param name="btnHumi"></param> + private void ShowHumidityDevice(NormalViewControl btnHumi) + { + var listDevice = new List<ZigBee.Device.CommonDevice>(); + foreach (var device in Common.LocalDevice.Current.listAllDevice) + { + //鑾峰彇婀垮害浼犳劅鍣� + if (device is ZigBee.Device.TemperatureSensor && ((ZigBee.Device.TemperatureSensor)device).SensorDiv == 2) + { + listDevice.Add(device); + } + //鏂伴 + else if (device.Type == ZigBee.Device.DeviceType.FreshAirHumiditySensor) + { + listDevice.Add(device); + } + //PM2.5鏄俯搴﹀拰婀垮害鍚堝湪鍚屼竴涓鐐� + else if (device.Type == ZigBee.Device.DeviceType.PMSensor) + { + listDevice.Add(device); + } + } + var listSelect = new List<string>() { newRoom.HumidityDevice }; + var form = new SelectDeviceForm(); + form.AddForm(listDevice, listSelect, true, true); + form.ActionSelectDevice += (list) => + { + if (list.Count == 0) + { + newRoom.HumidityDevice = string.Empty; + btnHumi.Text = Language.StringByID(R.MyInternationalizationString.uNothing); + return; + } + newRoom.HumidityDevice = Common.LocalDevice.Current.GetDeviceMainKeys(list[0]); + //鑾峰彇婀垮害鍊� + this.GetHumidityValue(btnHumi, newRoom.HumidityDevice); + }; + } + + /// <summary> + /// 鑾峰彇婀垮害鍊� + /// </summary> + /// <param name="btnHumi"></param> + /// <param name="deviceKey"></param> + private void GetHumidityValue(NormalViewControl btnHumi, string deviceKey) + { + var device = Common.LocalDevice.Current.GetDevice(deviceKey); + if (device == null) + { + return; + } + //鑾峰彇涓� + btnHumi.Text = Language.StringByID(R.MyInternationalizationString.Getting); + + bool receiveData = false; + HdlGatewayReceiveLogic.Current.RemoveEvent("HumidityDevice"); + HdlGatewayReceiveLogic.Current.AddAttributeEvent("HumidityDevice", ReceiveComandDiv.A璁惧灞炴�т笂鎶�, (report) => + { + string mainKeys = Common.LocalDevice.Current.GetDeviceMainKeys(report); + if (newRoom.HumidityDevice != mainKeys || btnHumi == null + || report.DeviceStatusReport.CluterID != 1029) + { + return; + } + receiveData = true; + HdlThreadLogic.Current.RunMain(() => + { + decimal humidity = (decimal)device.GetType().InvokeMember("currentHumidity", System.Reflection.BindingFlags.GetField, null, device, null); + if (humidity == 0) + { + //0 + btnHumi.Text = "0.0%"; + } + else + { + btnHumi.Text = humidity.ToString() + "%"; + } + + }, ShowErrorMode.NO); + }); + //鍙戦�佽幏鍙栨箍搴︾殑鍛戒护 + device.ReadAttri(ZigBee.Device.Cluster_ID.RelativeHumidityMeasurement, ZigBee.Device.AttriButeId.MeasuredValue); + + HdlThreadLogic.Current.RunThread(() => + { + //鍘昏幏鍙栬澶囧垪琛ㄧ殑淇℃伅 + System.Threading.Thread.Sleep(1500); + var result = Common.LocalDevice.Current.ReadDeviceEpointDeviceInfo(device); + if (result != null) + { + device.AttributeStatus.Clear(); + device.AttributeStatus.AddRange(result.AttributeStatus); + device.ReSave(); + } + if (receiveData == true) + { + //宸茬粡璇诲彇鍒版暟鎹� + return; + } + + //鍒濆鍊�,鍙栫紦瀛樻暟鎹� + foreach (var data in device.AttributeStatus) + { + if (data.ClusterId == 1029 + && data.AttributeId == (int)ZigBee.Device.AttriButeId.MeasuredValue) + { + //澶勭悊缃戝叧杩斿洖鐨勬箍搴﹀�� + decimal humidity = Common.LocalDevice.Current.AdjustHumidityValue(data.AttributeData); + + device.GetType().InvokeMember("currentHumidity", System.Reflection.BindingFlags.SetField, null, device, new object[] { humidity }); + device.ReSave(); + + //鍒朵綔铏氬亣鐨勫睘鎬т笂鎶� + var report = new ZigBee.Device.CommonDevice { DeviceAddr = device.DeviceAddr, DeviceEpoint = device.DeviceEpoint }; + report.DeviceStatusReport.CluterID = 1029; + HdlGatewayReceiveLogic.Current.DeviceReportPush(report, ReceiveComandDiv.A璁惧灞炴�т笂鎶�); + + HdlThreadLogic.Current.RunMain(() => + { + btnHumi.Text = humidity == 0 ? "0.0%" : humidity.ToString() + "%"; + }); + break; + } + } + }); + } + + #endregion + + #region 鈻� 鎴块棿鍥剧墖閫夋嫨_______________________ + + /// <summary> + /// 鎴块棿鍥剧墖閫夋嫨 + /// </summary> + /// <param name="imageContr"></param> + private void RoomPictrueSelect(ImageView imageContr) + { + var menuContr = new BottomMenuSelectForm(); + menuContr.AddForm(3); + //榛樿鍥惧簱 + menuContr.AddMenu(Language.StringByID(R.MyInternationalizationString.LocalPicture), () => + { + var form = new SelectLocalRoomImageForm(); + form.AddForm(); + form.FinishSelectEvent = (imgPath) => + { + if (string.IsNullOrEmpty(imgPath) == true) + { + return; + } + this.newRoom.BackgroundImageType = 0; + this.newRoom.BackgroundImage = imgPath; + imgPath = IO.FileUtils.GetImageFilePath(imgPath); + imageContr.ImageBytes = IO.FileUtils.ReadFile(imgPath); + }; + }); + //鎷嶇収 + menuContr.AddMenu(Language.StringByID(R.MyInternationalizationString.Photograph), () => + { + //閫氳繃鐩告満鎷嶇収瑁佸壀 + CropImage.TakePicture((imagePath) => + { + if (string.IsNullOrEmpty(imagePath) == true) + { + return; + } + this.newRoom.BackgroundImageType = 1; + imageContr.ImageBytes = Shared.IO.FileUtils.ReadFile(imagePath); + System.IO.File.Delete(imagePath); + }, "HdlPic", 2, 1); + }); + //鎴戠殑鐩稿唽 + menuContr.AddMenu(Language.StringByID(R.MyInternationalizationString.MyAblums), () => + { + //浠庣浉鍐岄�夋嫨鍥剧墖瑁佸壀 + CropImage.SelectPicture((imagePath) => + { + if (string.IsNullOrEmpty(imagePath) == true) + { + return; + } + this.newRoom.BackgroundImageType = 2; + imageContr.ImageBytes = Shared.IO.FileUtils.ReadFile(imagePath); + System.IO.File.Delete(imagePath); + + }, "HdlPic", 2, 1); + }); + } + + #endregion + + #region 鈻� 鐣岄潰鍏抽棴___________________________ + + /// <summary> + /// 鐣岄潰鍏抽棴 + /// </summary> + public override void CloseFormBefore() + { + this.FinishEditorEvent = null; + + HdlGatewayReceiveLogic.Current.RemoveEvent("TemperatrueDevice"); + HdlGatewayReceiveLogic.Current.RemoveEvent("HumidityDevice"); + + base.CloseFormBefore(); + } + + #endregion + #region 鈻� 涓�鑸柟娉昣__________________________ /// <summary> @@ -205,17 +607,24 @@ this.ShowMassage(ShowMsgType.Error, Language.StringByID(R.MyInternationalizationString.uPleaseInputRoomName)); return false; } - if (Shared.Common.Room.Lists.Find((obj) => obj.Name == this.newRoom.Name) != null) + if (string.IsNullOrEmpty(this.floorKeys) == true) { - this.ShowMassage(ShowMsgType.Error, Language.StringByID(R.MyInternationalizationString.HadSameRoom)); - return false; + var listRoom = HdlRoomLogic.Current.GetAllListRooms(); + if (listRoom.Find((obj) => obj.Name == this.newRoom.Name && obj.Id != this.newRoom.Id) != null) + { + this.ShowMassage(ShowMsgType.Error, Language.StringByID(R.MyInternationalizationString.uRoomNameIsExist)); + return false; + } } - if (newRoom.BackgroundImageType == 1 || newRoom.BackgroundImageType == 2) + else { - this.newRoom.MoveBackGroundIamageFileToDirectory(newRoom.BackgroundImage, newRoom.BackgroundImage); - this.newRoom.BackgroundImage = $"{Common.Config.Instance.Guid}/{Common.Config.Instance.HomeId}/{newRoom.BackgroundImage}"; + var listRoom = HdlRoomLogic.Current.GetFloorSortRoom(this.floorKeys); + if (listRoom.Find((obj) => obj.Name == this.newRoom.Name && obj.Id != this.newRoom.Id) != null) + { + this.ShowMassage(ShowMsgType.Error, Language.StringByID(R.MyInternationalizationString.uRoomNameIsExist)); + return false; + } } - newRoom.FloorId = this.floorKeys; return true; } -- Gitblit v1.8.0