From 6fa9d69da922c8049f5acfcbb9ce9fd26811024c Mon Sep 17 00:00:00 2001 From: xm <1271024303@qq.com> Date: 星期四, 16 四月 2020 17:10:57 +0800 Subject: [PATCH] 请合并代码 --- ZigbeeApp/Shared/Phone/UserCenter/Residence/AddNewRoomForm.cs | 582 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 582 insertions(+), 0 deletions(-) diff --git a/ZigbeeApp/Shared/Phone/UserCenter/Residence/AddNewRoomForm.cs b/ZigbeeApp/Shared/Phone/UserCenter/Residence/AddNewRoomForm.cs new file mode 100755 index 0000000..36f760b --- /dev/null +++ b/ZigbeeApp/Shared/Phone/UserCenter/Residence/AddNewRoomForm.cs @@ -0,0 +1,582 @@ +锘縰sing System; +using System.Collections.Generic; +using System.Text; + +namespace Shared.Phone.UserCenter.Residence +{ + /// <summary> + /// 娣诲姞鏂版埧闂寸殑鐣岄潰 + /// </summary> + public class AddNewRoomForm : EditorCommonForm + { + #region 鈻� 鍙橀噺澹版槑___________________________ + + /// <summary> + /// 瀹屾垚娣诲姞鎴块棿鐨勪簨浠� + /// </summary> + public Action FinishEditorEvent = null; + /// <summary> + /// 鍒楄〃鎺т欢 + /// </summary> + private FrameListControl listview = null; + /// <summary> + /// 妤煎眰涓婚敭 + /// </summary> + private string floorKeys = string.Empty; + /// <summary> + /// 鏂版埧闂村璞� + /// </summary> + private Common.Room newRoom = null; + + #endregion + + #region 鈻� 鍒濆鍖朹____________________________ + + /// <summary> + /// 鐢婚潰鏄剧ず(搴曞眰浼氬浐瀹氳皟鐢ㄦ鏂规硶锛屽�熶互瀹屾垚鐢婚潰鍒涘缓) + /// </summary> + /// <param name="i_floorKeys">妤煎眰涓婚敭</param> + public void ShowForm(string i_floorKeys) + { + this.floorKeys = i_floorKeys; + //璁剧疆澶撮儴淇℃伅 + base.SetTitleText(Language.StringByID(R.MyInternationalizationString.uCreatRoom)); + + //鍒濆鍖栦腑閮ㄤ俊鎭� + this.InitMiddleFrame(); + } + + /// <summary> + /// 鍒濆鍖栦腑閮ㄤ俊鎭� + /// </summary> + private void InitMiddleFrame() + { + //娓呯┖bodyFrame + this.ClearBodyFrame(); + + var listBackControl = new VerticalFrameControl(); + listBackControl.Height = bodyFrameLayout.Height; + bodyFrameLayout.AddChidren(listBackControl); + + //鍔犱竴涓櫧鑹茶儗鏅� + var frameBack1 = new FrameLayout(); + frameBack1.Height = Application.GetRealHeight(450); + frameBack1.Y = Application.GetRealHeight(196); + frameBack1.BackgroundColor = UserCenterColor.Current.White; + frameBack1.SetCornerWithSameRadius(Application.GetRealHeight(58), HDLUtils.RectCornerTopLeft | HDLUtils.RectCornerTopRight); + listBackControl.frameTable.AddChidren(frameBack1); + + //鍒濆鍖栦俊鎭甯� + var tableContr = new InformationEditorControl(); + this.listview = tableContr.InitControl(listBackControl.frameTable, Language.StringByID(R.MyInternationalizationString.uInfoEditor), 1175); + + //鎴块棿鍥剧墖搴曢儴闃村奖 + 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.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); + }; + + //鍙樻洿涓�涓嬮偅涓櫧鑹茶儗鏅殑Y杞�,瀹冨埌鍥剧墖鐨勪腑闂翠綅缃� + frameBack1.Y = btnPic.Y + btnPic.Height / 2; + + this.newRoom = new Common.Room(); + newRoom.FloorId = this.floorKeys; + newRoom.BackgroundImage = btnPic.ImagePath; + newRoom.Humidity = -1000; + newRoom.Temperatrue = -1000; + + //娣诲姞鍏ㄩ儴鑿滃崟 + this.AddAllMenuRow(tableContr, btnPic); + } + + #endregion + + #region 鈻� 娣诲姞鑿滃崟___________________________ + + /// <summary> + /// 娣诲姞鍏ㄩ儴鑿滃崟 + /// </summary> + 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); + listview.AddChidren(txtRoomName); + txtRoomName.InitControl(); + //搴曠嚎 + txtRoomName.AddBottomLine(); + + //璇PP涓烘湁妤煎眰鐨勬ā寮忔墠寮�鍚繖涓彍鍗� + if (floorKeys != string.Empty) + { + //銆愭墍灞炴ゼ灞傘�� + 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); + listview.AddChidren(rowTemperature); + rowTemperature.AddLeftCaption(Language.StringByID(R.MyInternationalizationString.uTemperature), 600); + //鍙崇澶� + rowTemperature.AddRightArrow(); + var btnTemper = rowTemperature.AddMostRightView(Language.StringByID(R.MyInternationalizationString.uNothing), 300); + //搴曠嚎 + rowTemperature.AddBottomLine(); + rowTemperature.ButtonClickEvent += (sender, e) => + { + //鏄剧ず娓╁害浼犳劅鍣ㄥ垪琛� + this.ShowTemperatrueDevice(btnTemper); + }; + + //銆愭箍搴︺�� + var rowHumidity = new FrameRowControl(this.listview.rowSpace / 2); + listview.AddChidren(rowHumidity); + rowHumidity.AddLeftCaption(Language.StringByID(R.MyInternationalizationString.uHumidity), 600); + //鍙崇澶� + rowHumidity.AddRightArrow(); + var btnHumi = rowHumidity.AddMostRightView(Language.StringByID(R.MyInternationalizationString.uNothing), 300); + //搴曠嚎 + rowHumidity.AddBottomLine(); + rowHumidity.ButtonClickEvent += (sender, e) => + { + //鏄剧ず婀垮害浼犳劅鍣ㄥ垪琛� + this.ShowHumidityDevice(btnHumi); + }; + + //鍒濆鍖栨甯冨畬鎴� + tableContr.FinishInitControl(); + tableContr = null; + //淇濆瓨 + var btnFinish = new BottomClickButton(); + btnFinish.TextID = R.MyInternationalizationString.uSave; + bodyFrameLayout.AddChidren(btnFinish); + btnFinish.ButtonClickEvent += (sender, e) => + { + this.newRoom.Name = txtRoomName.Text; + //妫�娴嬭兘鍚︿繚瀛樻埧闂� + if (this.CheckCanSaveRoom() == false) + { + return; + } + if (newRoom.BackgroundImageType == 1 || newRoom.BackgroundImageType == 2) + { + //鐢熸垚鍥剧墖 + 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); + } + + newRoom.FloorId = this.floorKeys; + if (newRoom.Humidity == -1000) + { + newRoom.Humidity = 0; + } + if (newRoom.Temperatrue == -1000) + { + newRoom.Temperatrue = 0; + } + + HdlRoomLogic.Current.AddRoom(newRoom); + this.FinishEditorEvent?.Invoke(); + + this.CloseForm(); + }; + } + + #endregion + + #region 鈻� 妤煎眰閫夋嫨___________________________ + + /// <summary> + /// 妤煎眰閫夋嫨 + /// </summary> + /// <param name="control"></param> + private void ShowSelectFloor(FrameCaptionViewControl control) + { + var dicFloor = HdlRoomLogic.Current.GetFloorSortList(); + + var listKeys = new List<string>(); + var listName = new List<string>(); + int index = 0; + foreach (string keys in dicFloor.Keys) + { + listKeys.Add(keys); + listName.Add(dicFloor[keys]); + if (keys == this.floorKeys) + { + index = listKeys.Count - 1; + } + } + PickerView.Show(listName, (value) => + { + control.txtView.Text = listName[value]; + //涓婚敭淇敼 + this.floorKeys = listKeys[value]; + }, + index, + Language.StringByID(R.MyInternationalizationString.uBelongeFloor), + Language.StringByID(R.MyInternationalizationString.uFinish), + Language.StringByID(R.MyInternationalizationString.uCancel)); + } + + #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); + } + } + 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; + } + if (newRoom.Temperatrue == -1000) + { + //娌℃湁鑾峰彇寰楀埌杩囨俯搴� + btnTemper.Text = Language.StringByID(R.MyInternationalizationString.Getting); + } + else + { + btnTemper.Text = this.newRoom.Temperatrue == 0 ? "0.0鈩�" : this.newRoom.Temperatrue.ToString() + "鈩�"; + btnTemper.Text += " " + Language.StringByID(R.MyInternationalizationString.Getting); + } + + HdlGatewayReceiveLogic.Current.RemoveEvent("TemperatrueDevice"); + HdlGatewayReceiveLogic.Current.AddAttributeEvent("TemperatrueDevice", ReceiveComandDiv.A璁惧灞炴�т笂鎶�, ((report) => + { + string mainKeys = Common.LocalDevice.Current.GetDeviceMainKeys(report); + if (newRoom.TemperatrueDevice != mainKeys || btnTemper == null) + { + return; + } + + foreach (var data in report.DeviceStatusReport.AttriBute) + { + if (data.AttributeId == (int)ZigBee.Device.AttriButeId.MeasuredValue) + { + HdlThreadLogic.Current.RunMain(() => + { + if (data.AttriButeData == 0) + { + //0鈩� + btnTemper.Text = "0.0鈩�"; + this.newRoom.Temperatrue = 0; + } + else if (data.AttriButeData > 32767) + { + //璐熸暟(鐗规畩澶勭悊) + string strValue = (data.AttriButeData - 65536).ToString(); + //灏忔暟鐐归渶瑕佷竴浣� + strValue = strValue.Substring(0, strValue.Length - 1); + //璁板綍娓╁害 + this.newRoom.Temperatrue = Convert.ToDecimal(strValue.Insert(strValue.Length - 1, ".")); + btnTemper.Text = this.newRoom.Temperatrue.ToString() + "鈩�"; + } + else + { + //灏忔暟鐐归渶瑕佷竴浣� + string strValue = data.AttriButeData.ToString(); + strValue = strValue.Substring(0, strValue.Length - 1); + //璁板綍娓╁害 + this.newRoom.Temperatrue = Convert.ToDecimal(strValue.Insert(strValue.Length - 1, ".")); + btnTemper.Text = this.newRoom.Temperatrue.ToString() + "鈩�"; + } + }); + } + } + })); + //鍙戦�佽幏鍙栨俯搴︾殑鍛戒护 + ((ZigBee.Device.TemperatureSensor)device).ReadTemperatureOrHumidity(); + } + + #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); + } + } + 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; + } + if (newRoom.Humidity == -1000) + { + //娌℃湁鑾峰彇寰楀埌杩囨箍搴� + btnHumi.Text = Language.StringByID(R.MyInternationalizationString.Getting); + } + else + { + btnHumi.Text = this.newRoom.Humidity == 0 ? "0.0%" : this.newRoom.Humidity.ToString() + "%"; + btnHumi.Text += " " + Language.StringByID(R.MyInternationalizationString.Getting); + } + + HdlGatewayReceiveLogic.Current.RemoveEvent("HumidityDevice"); + HdlGatewayReceiveLogic.Current.AddAttributeEvent("HumidityDevice", ReceiveComandDiv.A璁惧灞炴�т笂鎶�, (report) => + { + string mainKeys = Common.LocalDevice.Current.GetDeviceMainKeys(report); + if (newRoom.HumidityDevice != mainKeys || btnHumi == null) + { + return; + } + foreach (var data in report.DeviceStatusReport.AttriBute) + { + if (data.AttributeId == (int)ZigBee.Device.AttriButeId.MeasuredValue) + { + HdlThreadLogic.Current.RunMain(() => + { + if (data.AttriButeData == 0) + { + //0 + btnHumi.Text = "0.0%"; + this.newRoom.Humidity = 0; + } + else + { + //灏忔暟鐐归渶瑕佷竴浣�(婀垮害娌℃湁璐熸暟) + string strValue = data.AttriButeData.ToString(); + strValue = strValue.Substring(0, strValue.Length - 1); + //璁板綍婀垮害 + this.newRoom.Humidity = Convert.ToDecimal(strValue.Insert(strValue.Length - 1, ".")); + btnHumi.Text = this.newRoom.Humidity.ToString() + "%"; + } + }); + } + } + }); + //鍙戦�佽幏鍙栨箍搴︾殑鍛戒护 + ((ZigBee.Device.TemperatureSensor)device).ReadTemperatureOrHumidity(); + } + + #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> + /// 妫�娴嬭兘鍚︿繚瀛樻埧闂� + /// </summary> + /// <returns></returns> + private bool CheckCanSaveRoom() + { + if (this.newRoom.Name == string.Empty) + { + //璇疯緭鍏ユ埧闂村悕绉� + this.ShowMassage(ShowMsgType.Error, Language.StringByID(R.MyInternationalizationString.uPleaseInputRoomName)); + return false; + } + if (string.IsNullOrEmpty(this.floorKeys) == true) + { + 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; + } + } + else + { + 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; + } + } + + return true; + } + + #endregion + } +} -- Gitblit v1.8.0