using System;
using System.Collections.Generic;
using System.Text;
using ZigBee.Device;
using Shared.Phone.UserCenter;
namespace Shared.Phone.MainPage.Controls
{
///
/// 主页的设备卡片控件底层共通(宽度:458 + 14 * 2 高度:305 + 43)
///
public class DeviceCardCommon : FrameLayoutControl
{
#region ■ 变量声明___________________________
///
/// 卡片需要被移除的事件
///
public Action CardNeedRemoveEvent = null;
///
/// 背景图片控件
///
private PicViewControl btnBackGroud = null;
///
/// 设备名称控件
///
private NormalViewControl btnDeviceName = null;
///
/// 设备的背景圆圈图控件
///
private NormalViewControl btnDeviceRound = null;
///
/// 设备图标控件
///
private IconViewControl btnDeviceIcon = null;
///
/// 状态文本控件
///
private NormalViewControl btnStatu = null;
///
/// 开关控件
///
private PicViewControl btnSwitch = null;
///
/// 是否获取网关反馈的结果 0:没有获取得到 1:已经获取得到
///
private int ResponeResult = 0;
#endregion
#region ■ 初始化_____________________________
///
/// 主页的设备卡片控件底层共通(宽度:458 + 14 * 2 高度:305 + 43)
///
public DeviceCardCommon()
{
//图片真实宽度+图片自身左右空白
this.Width = Application.GetMinRealAverage(458 + 14 * 2);
//图片高度+阴影
this.Height = Application.GetMinRealAverage(305 + 43);
//取消点击特效
this.UseClickStatu = false;
}
///
/// 初始化控件
///
/// 指定设备
public virtual void InitControl(CommonDevice i_device)
{
//背景图片
this.btnBackGroud = new PicViewControl(this.Width, this.Height, false);
btnBackGroud.UnSelectedImagePath = "Item/FunctionCardView.png";
btnBackGroud.SelectedImagePath = "Item/FunctionCardViewSelected.png";
btnBackGroud.Gravity = Gravity.CenterHorizontal;
this.AddChidren(btnBackGroud, ChidrenBindMode.BindEventOnly);
//设备名称控件
this.btnDeviceName = new NormalViewControl(320, 63, true);
btnDeviceName.X = Application.GetMinRealAverage(40);
btnDeviceName.Y = Application.GetMinRealAverage(17);
btnDeviceName.TextSize = 16;
btnDeviceName.TextColor = UserCenterColor.Current.TextGrayColor1;
btnDeviceName.SelectedTextColor = UserCenterColor.Current.White;
btnDeviceName.Text = Common.LocalDevice.Current.GetDeviceEpointName(i_device);
this.AddChidren(btnDeviceName, ChidrenBindMode.BindEventOnly);
//收集控件
var btnCollect = new IconViewControl(107);
btnCollect.X = Application.GetMinRealAverage(350);
btnCollect.Y = Application.GetMinRealAverage(12);
btnCollect.UnSelectedImagePath = "Item/Collection1.png";
btnCollect.SelectedImagePath = "Item/CollectionSelected1.png";
this.AddChidren(btnCollect, ChidrenBindMode.NotBind);
btnCollect.IsSelected = HdlRoomLogic.Current.IsCollectInRoom(i_device);
btnCollect.ButtonClickEvent += (sender, e) =>
{
//状态取反
btnCollect.IsSelected = !btnCollect.IsSelected;
if (btnCollect.IsSelected == false)
{
//取消收藏
HdlRoomLogic.Current.DeleteLoveDevice(i_device);
if (HdlRoomLogic.Current.CurrentRoom.IsLove == true)
{
//如果当前房间是我的喜爱的话,回调卡片被删除的事件
this.CardNeedRemoveEvent?.Invoke();
}
}
else
{
//添加收藏
HdlRoomLogic.Current.AddLoveDevice(i_device);
}
};
//设备的背景圆圈图
this.btnDeviceRound = new NormalViewControl(Application.GetMinRealAverage(124), Application.GetMinRealAverage(124), false);
btnDeviceRound.Radius = (uint)Application.GetMinRealAverage(124) / 2;
btnDeviceRound.X = Application.GetMinRealAverage(44);
btnDeviceRound.Y = Application.GetMinRealAverage(101);
btnDeviceRound.BackgroundColor = Common.ZigbeeColor.Current.GXCForFunctionUnSelectedBackgroundColor;
btnDeviceRound.SelectedBackgroundColor = Common.ZigbeeColor.Current.GXCForFunctionBackgroundColor;
this.AddChidren(btnDeviceRound, ChidrenBindMode.BindEventOnly);
//设备图标控件
this.btnDeviceIcon = new IconViewControl(86);
btnDeviceIcon.X = Application.GetMinRealAverage(63);
btnDeviceIcon.Y = Application.GetMinRealAverage(121);
this.AddChidren(btnDeviceIcon, ChidrenBindMode.BindEventOnly);
//状态文本控件
this.btnStatu = new NormalViewControl(Application.GetMinRealAverage(280), Application.GetMinRealAverage(63), false);
btnStatu.X = Application.GetMinRealAverage(46);
btnStatu.Y = Application.GetMinRealAverage(236);
btnStatu.TextColor = UserCenterColor.Current.TextColor1;
btnStatu.SelectedTextColor = Common.ZigbeeColor.Current.GXCTextSelectedColor;
btnStatu.IsBold = true;
this.AddChidren(btnStatu, ChidrenBindMode.BindEventOnly);
//开关控件(不加入父控件中)
this.btnSwitch = new PicViewControl(109, 104);
btnSwitch.X = Application.GetMinRealAverage(325);
btnSwitch.Y = Application.GetMinRealAverage(202);
btnSwitch.UnSelectedImagePath = "Item/Switch1.png";
btnSwitch.SelectedImagePath = "Item/SwitchSelected1.png";
this.AddChidren(this.btnSwitch, ChidrenBindMode.NotBind);
btnSwitch.Visible = false;
//刷新信息
this.RefreshControlInfo(i_device);
}
#endregion
#region ■ 添加开关控件_______________________
///
/// 添加开关控件
///
///
public PicViewControl AddSwitchControl()
{
btnSwitch.Visible = true;
return btnSwitch;
}
#endregion
#region ■ 刷新控件状态_______________________
///
/// 刷新控件状态
///
/// 设备对象,不是推送的那个
public void RefreshControlInfo(CommonDevice i_device)
{
//设备状态必须刷新
this.btnStatu.Text = HdlDeviceOtherLogic.Current.GetDeviceStatu(i_device);
//设备图标也刷新
Common.LocalDevice.Current.SetDeviceIconToControl(btnDeviceIcon, i_device);
//检测设备是否是打开状态
bool isOpen = this.CheckIsOpenStatu(i_device);
this.SetCardStatu(isOpen);
}
///
/// 设置卡片状态
///
///
public void SetCardStatu(bool isOpen)
{
if (this.btnBackGroud.IsSelected == isOpen)
{
//状态一样,则不需要处理
return;
}
//背景图片
this.btnBackGroud.IsSelected = isOpen;
//设备名称控件
this.btnDeviceName.IsSelected = isOpen;
this.btnDeviceName.IsBold = isOpen;
//设备的背景圆圈图
this.btnDeviceRound.IsSelected = isOpen;
//设备图标控件
this.btnDeviceIcon.IsSelected = isOpen;
//状态文本控件
this.btnStatu.IsSelected = isOpen;
//开关控件
this.btnSwitch.IsSelected = isOpen;
}
///
/// 设置设备的状态文本
///
/// 状态文本
public void SetDeviceStatuText(string i_Text)
{
this.btnStatu.Text = i_Text;
}
#endregion
#region ■ 发送获取状态命令___________________
///
/// 发送获取状态命令
///
///
public virtual void SendStatuComand(CommonDevice i_device)
{
return;
}
#endregion
#region ■ 检测设备打开状态___________________
///
/// 检测设备是否是打开状态
///
///
///
public virtual bool CheckIsOpenStatu(CommonDevice i_device)
{
//默认用在线状态来判断
return i_device.IsOnline == 1;
}
#endregion
#region ■ 深度卡片信息的返回事件_____________
///
/// 深度卡片信息的返回事件(底层专用)
///
/// 设备
/// 房间
public void CardDetailInfoBackEvent(CommonDevice device, Common.Room room)
{
//如果是主页取消搜藏的话,回调卡片被删除的函数
if (HdlRoomLogic.Current.CurrentRoom.IsLove
&& HdlRoomLogic.Current.IsCollectInRoom(device) == false)
{
this.CardNeedRemoveEvent?.Invoke();
return;
}
//如果这个设备改变了房间的话,回调卡片被删除的函数
var nowRoom = HdlRoomLogic.Current.GetRoomByDevice(device);
if (nowRoom == null || nowRoom.Id != HdlRoomLogic.Current.CurrentRoom.Id)
{
this.CardNeedRemoveEvent?.Invoke();
return;
}
//如果它还在这个房间的话,刷新卡片信息
this.RefreshControlInfo(device);
}
#endregion
#region ■ 是否获取网关反馈的结果_____________
///
/// 检测是否获取网关反馈的结果,如果网关没有回复,则会弹出消息
/// 获取到回复结果之后,记得调用SetHadGetResponeResultStatu()函数设置状态
///
/// 设备目前的开关状态
public void StartCheckResponeResult(bool oldOpenStatu)
{
this.ResponeResult = 0;
HdlThreadLogic.Current.RunThread(() =>
{
int waitime = 30 * 100;
while (waitime > 0)
{
System.Threading.Thread.Sleep(100);
if (this.ResponeResult == 1)
{
//已经获取得到数据
break;
}
}
if (waitime <= 0)
{
//没有获取得到结果
HdlThreadLogic.Current.RunMain(() =>
{
var msgContr = new ShowMsgControl(ShowMsgType.Tip, Language.StringByID(R.MyInternationalizationString.FAIL));
msgContr.Show();
//变更回原来的状态
this.SetCardStatu(oldOpenStatu);
});
}
});
}
///
/// 设置已经获取到网关的反馈结果
///
public void SetHadGetResponeResultStatu()
{
this.ResponeResult = 1;
}
#endregion
#region ■ 控件摧毁___________________________
///
/// 控件摧毁
///
public override void RemoveFromParent()
{
this.CardNeedRemoveEvent = null;
base.RemoveFromParent();
}
#endregion
}
}