using Shared.Common;
using Shared.Phone.UserCenter;
using System;
using System.Collections.Generic;
using System.Text;
using ZigBee.Device;
namespace Shared.Phone.MainPage.ControlForm
{
///
/// mini夜灯的深度卡片界面
///
public class DeviceMiniLightDetailCardForm : DeviceDetailCardCommonForm
{
#region ■ 变量声明___________________________
///
/// 蜂鸣器的开关控件
///
private IconBigViewControl btnBuzzerSwitch = null;
///
/// mini夜灯的开关控件
///
private IconBigViewControl btnMiniSwitch = null;
///
/// 亮度的进度条控件
///
private SeekBarControl seekBarLight = null;
///
/// 色温的进度条控件
///
private SeekBarControl seekBarColor = null;
///
/// MaxLevel
///
private const int MaxLevel = 254;
///
/// 亮度进度值是否在改变中
///
private bool isLightProgressing = false;
///
/// 色温进度值是否在改变中
///
private bool isColorProgressing = false;
///
/// 能否发送进度值
///
private bool canSetProgressValue = true;
///
/// 1:发送的是小夜灯 2:发送的是蜂鸣器
///
private int sendDiv = 0;
#endregion
#region ■ 初始化_____________________________
///
/// 底层初始化中部控件完成之后
///
///
public override void InitMiddleFrameAfter(FrameLayout frameWhiteBack)
{
//添加接收蜂鸣器Ack主题
this.AddReceiveBuzzerAckEvent();
//左滑不能
this.ScrollEnabled = false;
//设置状态文字
if (((LightBase)this.device).OnOffStatus == 1)
{
//亮度 XX
this.SetStatuText(Language.StringByID(R.MyInternationalizationString.uBrightness) + " " + HdlDeviceOtherLogic.Current.GetDeviceStatu(this.device));
}
else
{
//关闭
this.SetStatuText(Language.StringByID(R.MyInternationalizationString.Close));
}
//亮度
var btnLightView = new NormalViewControl(300, 60, true);
btnLightView.Text = Language.StringByID(R.MyInternationalizationString.uBrightness) + ":";
btnLightView.X = Application.GetRealWidth(43);
btnLightView.Y = Application.GetRealHeight(320);
frameWhiteBack.AddChidren(btnLightView);
//底线
var btnLightLine = new NormalViewControl(Application.GetRealWidth(841), ControlCommonResourse.BottomLineHeight, false);
btnLightLine.BackgroundColor = UserCenterColor.Current.ButtomLine;
btnLightLine.X = btnLightView.X;
btnLightLine.Y = btnLightView.Bottom + Application.GetRealHeight(37);
frameWhiteBack.AddChidren(btnLightLine);
//进度条(+60的偏移量)
this.seekBarLight = new SeekBarControl(611 + 120);
seekBarLight.Y = Application.GetRealHeight(280);
seekBarLight.X = Application.GetRealWidth(266 - 60);
seekBarLight.Height = Application.GetRealHeight(144);
seekBarLight.SeekBarViewHeight = Application.GetRealHeight(20);
seekBarLight.SeekBarPadding = Application.GetRealWidth(60);
seekBarLight.IsProgressTextShow = true;
seekBarLight.ProgressBarColor = 0xffff6c2c;
seekBarLight.ProgressTextSize = 14;
seekBarLight.ProgressTextColor = UserCenterColor.Current.TextGrayColor2;
seekBarLight.Gravity = Gravity.Frame;
seekBarLight.Progress = (int)(((ColorTemperatureLight)this.device).Level * 1.0 / MaxLevel * 100);
frameWhiteBack.AddChidren(seekBarLight);
//色温
var btnColorView = new NormalViewControl(300, 60, true);
btnColorView.Text = Language.StringByID(R.MyInternationalizationString.uColorTemperature) + ":";
btnColorView.X = Application.GetRealWidth(43);
btnColorView.Y = btnLightLine.Y + Application.GetRealHeight(107);
frameWhiteBack.AddChidren(btnColorView);
//底线
var btnColorLine = new NormalViewControl(Application.GetRealWidth(841), ControlCommonResourse.BottomLineHeight, false);
btnColorLine.BackgroundColor = UserCenterColor.Current.ButtomLine;
btnColorLine.X = btnColorView.X;
btnColorLine.Y = btnColorView.Bottom + Application.GetRealHeight(37);
frameWhiteBack.AddChidren(btnColorLine);
//色温的渐变色背景
var btnColorBack = new PicViewControl(611, 20);
btnColorBack.UnSelectedImagePath = "Item/ColorTemperatureBar.png";
btnColorBack.X = Application.GetRealWidth(266);
btnColorBack.Y = btnColorView.Y + btnColorView.Height / 2 - HdlControlLogic.Current.GetPictrueRealSize(20) / 2;
frameWhiteBack.AddChidren(btnColorBack);
//进度条(+60的偏移量,色温的范围是 3000~6000)
this.seekBarColor = new SeekBarControl(611 + 120);
seekBarColor.Y = btnLightLine.Bottom + Application.GetRealHeight(58);
seekBarColor.X = Application.GetRealWidth(266 - 60);
seekBarColor.Height = Application.GetRealHeight(144);
seekBarColor.SeekBarViewHeight = Application.GetRealHeight(20);
seekBarColor.SeekBarPadding = Application.GetRealWidth(60);
seekBarColor.IsProgressTextShow = true;
seekBarColor.ProgressBarColor = UserCenterColor.Current.Transparent;
seekBarColor.SeekBarBackgroundColor = UserCenterColor.Current.Transparent;
seekBarColor.ProgressTextSize = 14;
seekBarColor.ProgressTextColor = UserCenterColor.Current.TextGrayColor2;
seekBarColor.Gravity = Gravity.Frame;
seekBarColor.ProgressBarUnitSring = "K";
seekBarColor.MinValue = 30;
seekBarColor.MaxValue = 60;
frameWhiteBack.AddChidren(seekBarColor);
//设置初始值
int colorValue = ((ColorTemperatureLight)this.device).ColorTemperature;
if (colorValue == 0) { colorValue = 3000; }
seekBarColor.Progress = colorValue / 100;
//蜂鸣器开关:
var btnBuzzerView = new NormalViewControl(300, 60, true);
btnBuzzerView.Text = Language.StringByID(R.MyInternationalizationString.uBuzzerSwitch) + ":";
btnBuzzerView.X = Application.GetRealWidth(43);
btnBuzzerView.Y = btnColorLine.Y + Application.GetRealHeight(107);
frameWhiteBack.AddChidren(btnBuzzerView);
//底线
var btnBuzzerLine = new NormalViewControl(Application.GetRealWidth(841), ControlCommonResourse.BottomLineHeight, false);
btnBuzzerLine.BackgroundColor = UserCenterColor.Current.ButtomLine;
btnBuzzerLine.X = btnBuzzerView.X;
btnBuzzerLine.Y = btnBuzzerView.Bottom + Application.GetRealHeight(37);
frameWhiteBack.AddChidren(btnBuzzerLine);
//开关
this.btnBuzzerSwitch = new IconBigViewControl(81, 81);
btnBuzzerSwitch.UnSelectedImagePath = "Item/Switch.png";
btnBuzzerSwitch.SelectedImagePath = "Item/SwitchSelected.png";
frameWhiteBack.AddChidren(btnBuzzerSwitch);
btnBuzzerSwitch.InitControl();
btnBuzzerSwitch.UseClickStatu = false;
btnBuzzerSwitch.X = Application.GetRealWidth(795) - btnBuzzerSwitch.XOffset;
btnBuzzerSwitch.Y = btnColorLine.Y + Application.GetRealHeight(98) - btnBuzzerSwitch.YOffset;
btnBuzzerSwitch.ButtonClickEvent += (sender, e) =>
{
//发送开关命令
this.SetBuzzerSwitchCommand(!btnBuzzerSwitch.IsSelected);
};
//小夜灯开关:
var btnMiniView = new NormalViewControl(300, 60, true);
btnMiniView.Text = Language.StringByID(R.MyInternationalizationString.uMiniLightSwitch) + ":";
btnMiniView.X = Application.GetRealWidth(43);
btnMiniView.Y = btnBuzzerLine.Y + Application.GetRealHeight(107);
frameWhiteBack.AddChidren(btnMiniView);
//底线
var btnMiniLine = new NormalViewControl(Application.GetRealWidth(841), ControlCommonResourse.BottomLineHeight, false);
btnMiniLine.BackgroundColor = UserCenterColor.Current.ButtomLine;
btnMiniLine.X = btnMiniView.X;
btnMiniLine.Y = btnMiniView.Bottom + Application.GetRealHeight(37);
frameWhiteBack.AddChidren(btnMiniLine);
//开关
this.btnMiniSwitch = new IconBigViewControl(81, 81);
btnMiniSwitch.UnSelectedImagePath = "Item/Switch.png";
btnMiniSwitch.SelectedImagePath = "Item/SwitchSelected.png";
frameWhiteBack.AddChidren(btnMiniSwitch);
btnMiniSwitch.InitControl();
btnMiniSwitch.UseClickStatu = false;
btnMiniSwitch.X = Application.GetRealWidth(795) - btnMiniSwitch.XOffset;
btnMiniSwitch.Y = btnBuzzerLine.Y + Application.GetRealHeight(98) - btnMiniSwitch.YOffset;
btnMiniSwitch.ButtonClickEvent += (sender, e) =>
{
//发送开关命令
this.SetLightSwitchCommand(!btnMiniSwitch.IsSelected);
};
btnMiniSwitch.IsSelected = ((LightBase)this.device).OnOffStatus == 1;
this.canSetProgressValue = btnMiniSwitch.IsSelected;
//亮度开始滑动的事件
seekBarLight.OnStartTrackingTouchEvent += (sender, e) =>
{
//进度值开始变更
this.isLightProgressing = true;
};
//亮度结束滑动的事件
seekBarLight.OnStopTrackingTouchEvent += (sender, e) =>
{
//进度值开始结束
this.isLightProgressing = false;
};
//亮度滑动过程中
int oldLightValue = seekBarLight.Progress;//之前的值
int nowLightValue = oldLightValue;//变更的值
seekBarLight.OnProgressChangedEvent += (sender, value) =>
{
if (Common.Config.Instance.Home.IsVirtually == false)
{
if (this.canSetProgressValue == true)
{
//能够发送进度值的时候,才记录
nowLightValue = value;
}
}
else
{
//如果住宅为虚拟住宅,直接改缓存
((ColorTemperatureLight)this.device).Level = value * MaxLevel / 100;
//亮度 XX
this.SetStatuText(Language.StringByID(R.MyInternationalizationString.uBrightness) + " " + HdlDeviceOtherLogic.Current.GetDeviceStatu(this.device));
}
};
//色温开始滑动的事件
seekBarColor.OnStartTrackingTouchEvent += (sender, e) =>
{
//进度值开始变更
this.isColorProgressing = true;
};
//色温结束滑动的事件
seekBarColor.OnStopTrackingTouchEvent += (sender, e) =>
{
//进度值开始结束
this.isColorProgressing = false;
};
//色温滑动过程中
int oldColorValue = seekBarColor.Progress;//之前的值
int nowColorValue = oldColorValue;//变更的值
seekBarColor.OnProgressChangedEvent += (sender, value) =>
{
if (Common.Config.Instance.Home.IsVirtually == false)
{
if (this.canSetProgressValue == true)
{
//能够发送进度值的时候,才记录
nowColorValue = value;
}
}
else
{
//如果住宅为虚拟住宅,直接改缓存
((ColorTemperatureLight)this.device).ColorTemperature = value * 100;
}
};
//开一个线程,监视是否滑动的滑动条,每秒检测一次
HdlThreadLogic.Current.RunThread(() =>
{
while (this.Parent != null)
{
System.Threading.Thread.Sleep(1000);
//发送亮度值
if (nowLightValue != oldLightValue)
{
oldLightValue = nowLightValue;
((ColorTemperatureLight)this.device).SetLevel((int)(oldLightValue * MaxLevel / 100.0));
}
//发送色温值
if (nowColorValue != oldColorValue)
{
oldColorValue = nowColorValue;
int value = 1000000 / (oldColorValue * 100);
((ColorTemperatureLight)this.device).SetColorTemperature(value);
}
}
if (this.canSetProgressValue == true)
{
//界面关闭时
if (nowLightValue != oldLightValue)
{
//发送亮度值
((ColorTemperatureLight)this.device).SetLevel((int)(nowLightValue * MaxLevel / 100.0));
}
if (nowColorValue != oldColorValue)
{
//发送色温值
int value = 1000000 / (nowColorValue * 100);
((ColorTemperatureLight)this.device).SetColorTemperature(value);
}
}
});
}
#endregion
#region ■ 发送夜灯开关命令___________________
///
/// 发送夜灯开关命令
///
///
private void SetLightSwitchCommand(bool isOpen)
{
//如果住宅是虚拟住宅
if (Common.Config.Instance.Home.IsVirtually == true)
{
((LightBase)this.device).OnOffStatus = isOpen == true ? 1 : 0;
//刷新开关状态
this.RefreshSwitchStatu(isOpen);
return;
}
//当按下开关按钮时,不能再发送进度值
this.canSetProgressValue = false;
//检测是否获取网关反馈的结果,如果网关没有回复,则会弹出消息
this.StartCheckResponeResult(new List { this.btnMiniSwitch.btnIcon }, (result) =>
{
HdlThreadLogic.Current.RunMain(() =>
{
//接收到网关回复
if (result == true)
{
bool statu = ((LightBase)this.device).OnOffStatus == 1;
//刷新开关状态
this.RefreshSwitchStatu(statu);
if (statu == true)
{
//当是打开状态时,网关说它会默认把亮度变成100%
//以防万一,这里再次读取一下
((ColorTemperatureLight)device).ReadLevel();
}
}
});
});
this.sendDiv = 1;
if (isOpen == true)
{
//打开
this.device.SwitchControl(1);
}
else
{
//关闭
this.device.SwitchControl(0);
}
}
#endregion
#region ■ 发送蜂鸣器开关命令_________________
///
/// 发送蜂鸣器开关命令
///
///
private void SetBuzzerSwitchCommand(bool isOpen)
{
//如果住宅是虚拟住宅
if (Common.Config.Instance.Home.IsVirtually == true)
{
//((LightBase)this.device).OnOffStatus = isOpen == true ? 1 : 0;
////刷新开关状态
//this.RefreshSwitchStatu(isOpen);
return;
}
//检测是否获取网关反馈的结果,如果网关没有回复,则会弹出消息
this.StartCheckResponeResult(new List { this.btnBuzzerSwitch.btnIcon }, (result) =>
{
HdlThreadLogic.Current.RunMain(() =>
{
//接收到网关回复
if (result == true)
{
this.btnBuzzerSwitch.IsSelected = isOpen;
//bool statu = ((LightBase)this.device).OnOffStatus == 1;
////刷新开关状态
//this.RefreshSwitchStatu(statu);
}
});
});
//发送命令
this.sendDiv = 2;
((ColorTemperatureLight)this.device).SendBuzzerSwitchControl(isOpen);
}
///
/// 添加接收蜂鸣器Ack主题
///
private void AddReceiveBuzzerAckEvent()
{
//Ack主题上报
string mainKeys = LocalDevice.Current.GetDeviceMainKeys(this.device);
HdlGatewayReceiveLogic.Current.AddAttributeEvent("DeviceBuzzerDetailCardACK", ReceiveComandDiv.A节点控制反馈, (report) =>
{
string mainKey2 = LocalDevice.Current.GetDeviceMainKeys(report);
if (mainKeys != mainKey2)
{
//不是同一个东西
return;
}
//这里只处理蜂鸣器的
if (this.sendDiv == 2)
{
//结果已经接收到
this.ResponeResult = 1;
}
});
}
#endregion
#region ■ 是否获取网关反馈的结果_____________
///
/// 检测网关的反馈结果(属性上报的对象:device.DeviceStatusReport)
///
/// 命令区分
/// 上报数据
///
public override bool CheckResponeResultStatu(ReceiveComandDiv comandDiv, CommonDevice report)
{
if (comandDiv == ReceiveComandDiv.A设备属性上报)
{
HdlThreadLogic.Current.RunMain(() =>
{
//刷新开关状态
this.RefreshSwitchStatu(((LightBase)this.device).OnOffStatus == 1);
});
return true;
}
return false;
}
#endregion
#region ■ 刷新开关状态_______________________
///
/// 刷新开关状态
///
/// 打开状态
private void RefreshSwitchStatu(bool isOpen)
{
if (this.isColorProgressing == true)
{
//如果是色温滑动的话,不需要刷新界面
return;
}
if (isOpen == true)
{
//亮度是必须要刷新的 亮度 XX
this.SetStatuText(Language.StringByID(R.MyInternationalizationString.uBrightness) + " " + HdlDeviceOtherLogic.Current.GetDeviceStatu(this.device));
if (this.isLightProgressing == false)
{
//当进度值在手动变更中时,不接收推送
seekBarLight.Progress = (int)(((ColorTemperatureLight)this.device).Level * 1.0 / MaxLevel * 100);
}
if (this.isColorProgressing == false)
{
//当进度值在手动变更中时,不接收推送
seekBarColor.Progress = (int)(((ColorTemperatureLight)this.device).ColorTemperature / 100);
}
this.btnMiniSwitch.IsSelected = true;
}
else
{
//变更字样:关闭
this.SetStatuText(Language.StringByID(R.MyInternationalizationString.Close));
this.btnMiniSwitch.IsSelected = false;
}
//回复的结果说,处于打开状态才能发送
this.canSetProgressValue = isOpen;
}
#endregion
#region ■ 界面关闭___________________________
///
/// 界面关闭
///
public override void CloseFormBefore()
{
base.CloseFormBefore();
HdlGatewayReceiveLogic.Current.RemoveEvent("DeviceBuzzerDetailCardACK");
}
#endregion
}
}