| | |
| | | #region ■ 变量声明___________________________
|
| | |
|
| | | /// <summary>
|
| | | /// 结束编辑名称的事件
|
| | | /// </summary>
|
| | | public Action<string> FinishEditorEvent = null;
|
| | | /// <summary>
|
| | | /// 列表控件
|
| | | /// </summary>
|
| | | private VerticalListControl listview = null;
|
| | |
| | | /// 克隆对象
|
| | | /// </summary>
|
| | | private Common.Room cloneRoom = null;
|
| | | /// <summary>
|
| | | /// 改变房间图片
|
| | | /// </summary>
|
| | | private bool changedRoomPic = false;
|
| | |
|
| | | #endregion
|
| | |
|
| | |
| | | //清空bodyFrame
|
| | | this.ClearBodyFrame();
|
| | |
|
| | | var btnPic = new PicViewControl(887, 444);
|
| | | btnPic.Y = Application.GetRealHeight(60);
|
| | | btnPic.Gravity = Gravity.CenterHorizontal;
|
| | | btnPic.UnSelectedImagePath = this.cloneRoom.BackgroundImage;
|
| | | bodyFrameLayout.AddChidren(btnPic);
|
| | | //房间图片
|
| | | var framePic = new FrameLayout();
|
| | | framePic.Y = Application.GetRealHeight(60);
|
| | | framePic.Width = Application.GetMinRealAverage(887);
|
| | | framePic.Height = Application.GetMinRealAverage(444);
|
| | | framePic.Gravity = Gravity.CenterHorizontal;
|
| | | framePic.Radius = (uint)Application.GetRealHeight(17);
|
| | | framePic.BackgroundColor = UserCenterColor.Current.BodyFrameLayout;
|
| | | bodyFrameLayout.AddChidren(framePic);
|
| | | var btnPic = new ImageView();
|
| | | btnPic.Radius = (uint)Application.GetRealHeight(17);
|
| | | framePic.AddChidren(btnPic);
|
| | | if (this.editorRoom.BackgroundImageType == 0)
|
| | | {
|
| | | btnPic.ImagePath = this.editorRoom.BackgroundImage;
|
| | | }
|
| | | else
|
| | | {
|
| | | btnPic.ImageBytes = Common.Global.ReadFileByHomeId(this.editorRoom.BackgroundImage);
|
| | | }
|
| | | //在上面放一层阴影
|
| | | var btnPicBack = new FrameLayout();
|
| | | btnPicBack.Radius = (uint)Application.GetRealHeight(17);
|
| | | btnPicBack.BackgroundColor = 0x26000000;
|
| | | framePic.AddChidren(btnPicBack);
|
| | | btnPicBack.MouseUpEventHandler += (sender, e) =>
|
| | | {
|
| | | //房间图片选择
|
| | | this.RoomPictrueSelect(btnPic);
|
| | | };
|
| | | //添加阴影特效
|
| | | framePic.SetViewShadow(true);
|
| | |
|
| | | //初始化桌布
|
| | | var tableContr = new InformationEditorControl();
|
| | | this.listview = tableContr.InitControl(bodyFrameLayout, Language.StringByID(R.MyInternationalizationString.uInfoEditor), 562, 1175);
|
| | |
|
| | | //添加全部菜单
|
| | | this.AddAllMenuRow(tableContr);
|
| | | this.AddAllMenuRow(tableContr, btnPic);
|
| | | }
|
| | |
|
| | | #endregion
|
| | |
| | | /// <summary>
|
| | | /// 添加全部菜单
|
| | | /// </summary>
|
| | | private void AddAllMenuRow(InformationEditorControl tableContr)
|
| | | private void AddAllMenuRow(InformationEditorControl tableContr, ImageView btnPic)
|
| | | {
|
| | | //【房间名称】
|
| | | var txtRoomName = new FrameCaptionInputControl(Language.StringByID(R.MyInternationalizationString.uRoomName), this.cloneRoom.Name, this.listview.rowSpace / 2);
|
| | |
| | | //底线
|
| | | txtRoomName.AddBottomLine();
|
| | |
|
| | | //【所属楼层】
|
| | | var btnBelone = new FrameCaptionViewControl(Language.StringByID(R.MyInternationalizationString.uBelongeFloor), Common.Config.Instance.Home.FloorDics[this.cloneRoom.FloorId], this.listview.rowSpace / 2);
|
| | | listview.AddChidren(btnBelone);
|
| | | btnBelone.InitControl();
|
| | | //右箭头
|
| | | btnBelone.AddRightArrow();
|
| | | //底线
|
| | | btnBelone.AddBottomLine();
|
| | | btnBelone.ButtonClickEvent += (sender, e) =>
|
| | | //该APP为有楼层的模式才开启这个菜单
|
| | | if (string.IsNullOrEmpty(this.cloneRoom.FloorId) == false)
|
| | | {
|
| | | //楼层选择
|
| | | this.ShowSelectFloor(btnBelone);
|
| | | };
|
| | | //【所属楼层】
|
| | | var btnBelone = new FrameCaptionViewControl(Language.StringByID(R.MyInternationalizationString.uBelongeFloor), Common.Config.Instance.Home.FloorDics[this.cloneRoom.FloorId], 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);
|
| | |
| | | rowTemperature.AddBottomLine();
|
| | | rowTemperature.ButtonClickEvent += (sender, e) =>
|
| | | {
|
| | | //显示温度传感器列表
|
| | | this.ShowTemperatrueDevice(btnTemper);
|
| | | };
|
| | | if (string.IsNullOrEmpty(cloneRoom.TemperatrueDevice) == false)
|
| | | {
|
| | | //获取温度
|
| | | this.GetTemperatrueValue(btnTemper, cloneRoom.TemperatrueDevice);
|
| | | }
|
| | |
|
| | | //【湿度】
|
| | | var rowHumidity = new FrameRowControl(this.listview.rowSpace / 2);
|
| | |
| | | rowHumidity.AddBottomLine();
|
| | | rowHumidity.ButtonClickEvent += (sender, e) =>
|
| | | {
|
| | | //显示湿度传感器列表
|
| | | this.ShowHumidityDevice(btnHumi);
|
| | | };
|
| | | if (string.IsNullOrEmpty(cloneRoom.HumidityDevice) == false)
|
| | | {
|
| | | //获取湿度
|
| | | this.GetHumidityValue(btnHumi, cloneRoom.HumidityDevice);
|
| | | }
|
| | |
|
| | | //初始化桌布完成
|
| | | tableContr.FinishInitControl(bodyFrameLayout, this.listview);
|
| | |
| | | {
|
| | | return;
|
| | | }
|
| | | //更改图片
|
| | | if (this.changedRoomPic == true)
|
| | | {
|
| | | if (editorRoom.BackgroundImageType == 1 || editorRoom.BackgroundImageType == 2)
|
| | | {
|
| | | //删除掉原来的自定义图片
|
| | | if (Common.Global.IsExistsByHomeId(editorRoom.BackgroundImage) == true)
|
| | | {
|
| | | Common.Global.DeleteFilebyHomeId(editorRoom.BackgroundImage);
|
| | | }
|
| | | //备份
|
| | | HdlAutoBackupLogic.DeleteFile(editorRoom.BackgroundImage);
|
| | | }
|
| | | //自定义图片
|
| | | if (cloneRoom.BackgroundImageType == 1 || cloneRoom.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);
|
| | | cloneRoom.BackgroundImage = picName;
|
| | | //备份
|
| | | HdlAutoBackupLogic.AddOrEditorFile(picName);
|
| | | }
|
| | | }
|
| | |
|
| | | editorRoom.FloorId = cloneRoom.FloorId;
|
| | | editorRoom.Name = cloneRoom.Name;
|
| | | editorRoom.HumidityDevice = cloneRoom.HumidityDevice;
|
| | | editorRoom.TemperatrueDevice = cloneRoom.TemperatrueDevice;
|
| | | editorRoom.BackgroundImage = cloneRoom.BackgroundImage;
|
| | | editorRoom.BackgroundImageType = cloneRoom.BackgroundImageType;
|
| | | editorRoom.Save();
|
| | |
|
| | | FinishEditorEvent?.Invoke(this.editorRoom.Name);
|
| | | this.CloseForm();
|
| | | };
|
| | | }
|
| | |
| | |
|
| | | #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>() { cloneRoom.TemperatrueDevice };
|
| | | var form = new SelectDeviceForm();
|
| | | form.AddForm(listDevice, listSelect, true, true);
|
| | | form.ActionSelectDevice += (list) =>
|
| | | {
|
| | | if (list.Count == 0)
|
| | | {
|
| | | cloneRoom.TemperatrueDevice = string.Empty;
|
| | | btnTemper.Text = Language.StringByID(R.MyInternationalizationString.uNothing);
|
| | | return;
|
| | | }
|
| | | cloneRoom.TemperatrueDevice = Common.LocalDevice.Current.GetDeviceMainKeys(list[0]);
|
| | | //获取温度值
|
| | | this.GetTemperatrueValue(btnTemper, cloneRoom.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.uGetting);
|
| | |
|
| | | HdlGatewayReceiveLogic.Current.RemoveEvent("TemperatrueDevice");
|
| | | HdlGatewayReceiveLogic.Current.AddAttributeEvent("TemperatrueDevice", ReceiveComandDiv.A设备属性上报, ((report) =>
|
| | | {
|
| | | string mainKeys = Common.LocalDevice.Current.GetDeviceMainKeys(report);
|
| | | if (cloneRoom.TemperatrueDevice != mainKeys || btnTemper == null)
|
| | | {
|
| | | return;
|
| | | }
|
| | | //移除掉事件
|
| | | HdlGatewayReceiveLogic.Current.RemoveEvent("TemperatrueDevice");
|
| | |
|
| | | 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℃";
|
| | | }
|
| | | else if (data.AttriButeData > 32767)
|
| | | {
|
| | | //负数(特殊处理)
|
| | | string strValue = (data.AttriButeData - 65536).ToString();
|
| | | //小数点需要一位
|
| | | strValue = strValue.Substring(0, strValue.Length - 1);
|
| | | btnTemper.Text = strValue.Insert(strValue.Length - 1, ".") + "℃";
|
| | | }
|
| | | else
|
| | | {
|
| | | //小数点需要一位
|
| | | string strValue = data.AttriButeData.ToString();
|
| | | strValue = strValue.Substring(0, strValue.Length - 1);
|
| | | btnTemper.Text = strValue.Insert(strValue.Length - 1, ".") + "℃";
|
| | | }
|
| | | });
|
| | | }
|
| | | }
|
| | | }));
|
| | | //发送获取温度的命令
|
| | | ((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>() { cloneRoom.HumidityDevice };
|
| | | var form = new SelectDeviceForm();
|
| | | form.AddForm(listDevice, listSelect, true, true);
|
| | | form.ActionSelectDevice += (list) =>
|
| | | {
|
| | | if (list.Count == 0)
|
| | | {
|
| | | cloneRoom.HumidityDevice = string.Empty;
|
| | | btnHumi.Text = Language.StringByID(R.MyInternationalizationString.uNothing);
|
| | | return;
|
| | | }
|
| | | cloneRoom.HumidityDevice = Common.LocalDevice.Current.GetDeviceMainKeys(list[0]);
|
| | | //获取湿度值
|
| | | this.GetHumidityValue(btnHumi, cloneRoom.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.uGetting);
|
| | |
|
| | | HdlGatewayReceiveLogic.Current.RemoveEvent("HumidityDevice");
|
| | | HdlGatewayReceiveLogic.Current.AddAttributeEvent("HumidityDevice", ReceiveComandDiv.A设备属性上报, (report) =>
|
| | | {
|
| | | string mainKeys = Common.LocalDevice.Current.GetDeviceMainKeys(report);
|
| | | if (cloneRoom.HumidityDevice != mainKeys || btnHumi == null)
|
| | | {
|
| | | return;
|
| | | }
|
| | | //移除掉事件
|
| | | HdlGatewayReceiveLogic.Current.RemoveEvent("HumidityDevice");
|
| | | 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%";
|
| | | }
|
| | | else
|
| | | {
|
| | | //小数点需要一位(湿度没有负数)
|
| | | string strValue = data.AttriButeData.ToString();
|
| | | strValue = strValue.Substring(0, strValue.Length - 1);
|
| | | btnHumi.Text = strValue.Insert(strValue.Length - 1, ".") + "%";
|
| | | }
|
| | | });
|
| | | }
|
| | | }
|
| | | });
|
| | | //发送获取湿度的命令
|
| | | ((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 localPic = new Phone.Device.Room.AddRoomSelectPicByLocal();
|
| | | Shared.Phone.UserView.HomePage.Instance.AddChidren(localPic);
|
| | | Shared.Phone.UserView.HomePage.Instance.PageIndex += 1;
|
| | | localPic.Show();
|
| | | localPic.action = (imgPath) =>
|
| | | {
|
| | | if (string.IsNullOrEmpty(imgPath) == true)
|
| | | {
|
| | | return;
|
| | | }
|
| | | this.changedRoomPic = true;
|
| | | this.cloneRoom.BackgroundImageType = 0;
|
| | | this.cloneRoom.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.changedRoomPic = true;
|
| | | this.cloneRoom.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.changedRoomPic = true;
|
| | | this.cloneRoom.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>
|
| | |
| | | this.ShowMassage(ShowMsgType.Error, Language.StringByID(R.MyInternationalizationString.uPleaseInputRoomName));
|
| | | return false;
|
| | | }
|
| | | if (Shared.Common.Room.Lists.Find((obj) => obj.Name == this.cloneRoom.Name && obj.Id != this.cloneRoom.Id) != null)
|
| | | if (string.IsNullOrEmpty(this.cloneRoom.FloorId) == true)
|
| | | {
|
| | | this.ShowMassage(ShowMsgType.Error, Language.StringByID(R.MyInternationalizationString.HadSameRoom));
|
| | | return false;
|
| | | if (Shared.Common.Room.Lists.Find((obj) => obj.Name == this.cloneRoom.Name && obj.Id != this.cloneRoom.Id) != null)
|
| | | {
|
| | | this.ShowMassage(ShowMsgType.Error, Language.StringByID(R.MyInternationalizationString.HadSameRoom));
|
| | | return false;
|
| | | }
|
| | | }
|
| | | if (cloneRoom.BackgroundImageType == 1 || cloneRoom.BackgroundImageType == 2)
|
| | | else
|
| | | {
|
| | | this.cloneRoom.MoveBackGroundIamageFileToDirectory(cloneRoom.BackgroundImage, cloneRoom.BackgroundImage);
|
| | | this.cloneRoom.BackgroundImage = $"{Common.Config.Instance.Guid}/{Common.Config.Instance.HomeId}/{cloneRoom.BackgroundImage}";
|
| | | var listRoom = Common.Room.CurrentRoom.GetFloorSortRoom(this.cloneRoom.FloorId);
|
| | | if (listRoom.Find((obj) => obj.Name == this.cloneRoom.Name && obj.Id != this.cloneRoom.Id) != null)
|
| | | {
|
| | | this.ShowMassage(ShowMsgType.Error, Language.StringByID(R.MyInternationalizationString.HadSameRoom));
|
| | | return false;
|
| | | }
|
| | | }
|
| | |
|
| | | editorRoom.FloorId = cloneRoom.FloorId;
|
| | | editorRoom.Name = cloneRoom.Name;
|
| | | editorRoom.BackgroundImage = cloneRoom.BackgroundImage;
|
| | | editorRoom.BackgroundImageType = cloneRoom.BackgroundImageType;
|
| | | cloneRoom = null;
|
| | |
|
| | | return true;
|
| | | }
|