using System; using Shared.Common; using Shared.Phone.UserCenter; using ZigBee.Device; namespace Shared.Phone.Device.CommonForm { public class RoomView : FrameLayoutBase { /// /// Room /// private Common.Room room; FrameLayout roomNameBackground; FrameLayout roomTemperatureBackground; Button roomListBtn; Button temperatureText; Button humidityText; /// /// 温度设备 /// private CommonDevice temperDevice = null; /// /// 湿度设备 /// private CommonDevice humidDevice = null; /// /// RoomView /// /// /// public RoomView(int x, int y) { X = Application.GetRealWidth(x); Y = Application.GetRealHeight(y); Width = Application.GetRealWidth(717); Height = Application.GetRealHeight(478); } /// /// Init /// /// public void Init(Common.Room r) { this.RemoveAll(); this.room = r; this.temperDevice = HdlDeviceCommonLogic.Current.GetDevice(room.TemperatrueDevice); this.humidDevice = HdlDeviceCommonLogic.Current.GetDevice(room.HumidityDevice); var roomBackView = new FrameLayout() { Width = Application.GetRealWidth(717), Height = Application.GetRealHeight(478), Radius = (uint)Application.GetRealHeight(17), Tag = "R" }; AddChidren(roomBackView); var roomImg = new ImageView() { ImagePath = room.BackgroundImageType == 0 ? room.BackgroundImage : System.IO.Path.Combine(Config.Instance.FullPath, room.BackgroundImage), Radius = (uint)Application.GetRealHeight(17), Tag = "R" }; roomBackView.AddChidren(roomImg); //加个特殊的遮罩 var frameBackGroudTemp = new FrameLayout(); frameBackGroudTemp.Width = roomBackView.Width; frameBackGroudTemp.Height = roomBackView.Height; frameBackGroudTemp.Radius = (uint)Application.GetRealHeight(17); frameBackGroudTemp.BackgroundColor = UserCenterColor.Current.PictrueZhezhaoColor; roomBackView.AddChidren(frameBackGroudTemp); roomNameBackground = new FrameLayout { X = Application.GetRealWidth(29), Y = Application.GetRealHeight(282), Width = Application.GetRealWidth(200), Height = Application.GetRealHeight(80), BackgroundColor = ZigbeeColor.Current.GXCGrayBackgroundColor2 }; roomBackView.AddChidren(roomNameBackground); roomNameBackground.SetCornerWithSameRadius(Application.GetRealHeight(40), HDLUtils.RectCornerTopRight | HDLUtils.RectCornerBottomRight); var roomName = new Button() { X = Application.GetRealWidth(29), Width = Application.GetRealWidth(190), Text = room.Name, TextColor = ZigbeeColor.Current.GXCTextWhiteColor, TextSize = 10, TextAlignment = TextAlignment.CenterLeft, IsBold = true }; roomNameBackground.AddChidren(roomName); roomNameBackground.Width = (roomName.GetTextWidth() + Application.GetRealWidth(100)) > Application.GetRealWidth(600) ? Application.GetRealWidth(600) : roomName.GetTextWidth() + Application.GetRealWidth(100); roomName.Width = roomNameBackground.Width - Application.GetRealWidth(40); roomTemperatureBackground = new FrameLayout { X = Application.GetRealWidth(29), Y = Application.GetRealHeight(374), Width = Application.GetRealWidth(400), Height = Application.GetRealHeight(80), BackgroundColor = ZigbeeColor.Current.GXCGrayBackgroundColor2 }; roomBackView.AddChidren(roomTemperatureBackground); roomTemperatureBackground.SetCornerWithSameRadius(Application.GetRealHeight(40), HDLUtils.RectCornerTopRight | HDLUtils.RectCornerBottomRight); var temperatureIcon = new Button { X = Application.GetRealWidth(12), Width = this.GetPictrueRealSize(58), Height = this.GetPictrueRealSize(58), Gravity = Gravity.CenterVertical, UnSelectedImagePath = "Room/Temperature.png" }; roomTemperatureBackground.AddChidren(temperatureIcon); temperatureText = new Button { X = Application.GetRealWidth(69), Width = Application.GetRealWidth(120), Text = "--℃", TextSize = 14, TextAlignment = TextAlignment.CenterLeft }; if (this.temperDevice != null) { //这个设备要存在本地才行 decimal temperatrue = (decimal)temperDevice.GetType().InvokeMember("currentTemperature", System.Reflection.BindingFlags.GetField, null, temperDevice, null); temperatureText.Text = temperatrue == 0 ? "0.0℃" : temperatrue.ToString() + "℃"; } roomTemperatureBackground.AddChidren(temperatureText); temperatureText.Width = temperatureText.GetTextWidth() + Application.GetRealWidth(60); var humidityIcon = new Button { X = temperatureText.Right, Width = this.GetPictrueRealSize(58), Height = this.GetPictrueRealSize(58), Gravity = Gravity.CenterVertical, UnSelectedImagePath = "Room/Humidity.png" }; roomTemperatureBackground.AddChidren(humidityIcon); humidityText = new Button { X = humidityIcon.Right, Width = Application.GetRealWidth(120), Text = "--%", TextSize = 14, TextAlignment = TextAlignment.CenterLeft }; if (this.humidDevice != null) { //这个设备要存在本地才行 decimal humidity = (decimal)humidDevice.GetType().InvokeMember("currentHumidity", System.Reflection.BindingFlags.GetField, null, humidDevice, null); humidityText.Text = humidity == 0 ? "0.0%" : humidity.ToString() + "%"; } roomTemperatureBackground.AddChidren(humidityText); humidityText.Width = humidityText.GetTextWidth() + Application.GetRealWidth(60); roomTemperatureBackground.Width = (humidityText.Width + temperatureText.Width + Application.GetRealWidth(150)) > Application.GetRealWidth(600) ? Application.GetRealWidth(600) : (humidityText.Width + temperatureText.Width + Application.GetRealWidth(150)); if (string.IsNullOrEmpty(room.TemperatrueDevice) == false) { //发送获取温度的命令 var dev = HdlDeviceCommonLogic.Current.GetDevice(room.TemperatrueDevice); HdlDeviceAttributeLogic.Current.SendTemperatureStatuComand(dev); } if (string.IsNullOrEmpty(room.HumidityDevice) == false) { var dev = HdlDeviceCommonLogic.Current.GetDevice(room.HumidityDevice); HdlDeviceAttributeLogic.Current.SendHumidityStatuComand(dev); } roomListBtn = new Button() { X = roomBackView.Width - Application.GetRealWidth(100 + 20), Y = Application.GetRealHeight(20), Width = this.GetPictrueRealSize(100), Height = this.GetPictrueRealSize(100), UnSelectedImagePath = "Room/List.png", }; roomBackView.AddChidren(roomListBtn); roomListBtn.MouseUpEventHandler += (send, e) => { CommonPage.Instance.IsDrawerLockMode = true; var form = new UserCenter.Residence.EditorRoomInforForm(); form.AddForm(room); form.FinishEditorEvent += (roomName2) => { //重新刷新控件 this.Init(this.room); }; }; //设备属性上报 HdlGatewayReceiveLogic.Current.AddAttributeEvent("RoomView" + this.room.Id, ReceiveComandDiv.A设备属性上报, (report) => { if (this.temperDevice != null) { //温度设备 if (report.DeviceAddr == temperDevice.DeviceAddr && report.DeviceEpoint == temperDevice.DeviceEpoint) { HdlThreadLogic.Current.RunMain(() => { decimal temperatrue = (decimal)temperDevice.GetType().InvokeMember("currentTemperature", System.Reflection.BindingFlags.GetField, null, temperDevice, null); if (temperatrue == 0) { temperatureText.Text = "0.0℃"; } else { temperatureText.Text = temperatrue + "℃"; } }, ShowErrorMode.NO); } } if (this.humidDevice != null) { //湿度设备 if (report.DeviceAddr == humidDevice.DeviceAddr && report.DeviceEpoint == humidDevice.DeviceEpoint) { HdlThreadLogic.Current.RunMain(() => { decimal humidity = (decimal)humidDevice.GetType().InvokeMember("currentHumidity", System.Reflection.BindingFlags.GetField, null, humidDevice, null); if (humidity == 0) { humidityText.Text = "--%"; } else { humidityText.Text = humidity + "%"; } }, ShowErrorMode.NO); } } }); } /// /// HideName /// public void HideName(bool statu) { roomNameBackground.Visible = roomTemperatureBackground.Visible = roomListBtn.Visible = !statu; } /// /// /// public override void RemoveFromParent() { HdlGatewayReceiveLogic.Current.RemoveEvent("RoomView" + this.room.Id); base.RemoveFromParent(); } } }