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();
}
}
}