using Shared.Common;
using Shared.Phone.UserCenter;
using System;
using System.Collections.Generic;
using System.Text;
using ZigBee.Device;
namespace Shared.Phone.MainPage.ControlForm
{
///
/// 色温灯类型的深度卡片界面
///
public class DeviceColorTemperatureLightDetailCardForm : DeviceDetailCardCommonForm
{
#region ■ 变量声明___________________________
///
/// 界面上可以操作的控件
///
private List listControl = new List();
///
/// MaxLevel
///
private const int MaxLevel = 254;
///
/// 彩灯控件
///
private WaveSeekBar waveSeekBar = null;
///
/// 进度值是否在改变中
///
private bool isProgressing = false;
///
/// 能否发送进度值
///
private bool canSetProgressValue = true;
///
/// 彩灯是否是打开状态(不能用控件的Select来判断,太坑)
///
private bool IsLightOpen = false;
#endregion
#region ■ 初始化_____________________________
///
/// 底层初始化中部控件完成之后
///
///
public override void InitMiddleFrameAfter(FrameLayout frameWhiteBack)
{
//左滑不能
this.ScrollEnabled = false;
//先清空
this.listControl = new List();
//设置状态文字
if (((LightBase)this.device).OnOffStatus == 1)
{
//亮度 XX
this.SetStatuText(Language.StringByID(R.MyInternationalizationString.uBrightness) + " " + HdlDeviceCommonLogic.Current.GetMainPageDeviceStatuText(this.device));
}
else
{
//关闭
this.SetStatuText(Language.StringByID(R.MyInternationalizationString.Close));
}
//彩灯控件
this.waveSeekBar = new WaveSeekBar();
waveSeekBar.Y = Application.GetRealHeight(233);
waveSeekBar.Width = this.GetPictrueRealSize(253);
waveSeekBar.Height = this.GetPictrueRealSize(516);
waveSeekBar.Gravity = Gravity.CenterHorizontal;
waveSeekBar.WavePadding = Application.GetRealWidth(8);
waveSeekBar.MaxValue = 100;
waveSeekBar.Progress = (int)(((ColorTemperatureLight)this.device).Level * 1.0 / MaxLevel * 100);
waveSeekBar.CornerRadius = Application.GetRealHeight(58);
waveSeekBar.SetProgressBarColors(ZigbeeColor.Current.GXCWaveSeekBarColor_Start, ZigbeeColor.Current.GXCWaveSeekBarColor_End);
frameWhiteBack.AddChidren(waveSeekBar);
//开关
var btnSwitch = new IconViewControl(81);
btnSwitch.UnSelectedImagePath = "Item/Switch.png";
btnSwitch.SelectedImagePath = "Item/SwitchSelected.png";
btnSwitch.Y = waveSeekBar.Bottom + Application.GetRealHeight(418);
btnSwitch.Gravity = Gravity.CenterHorizontal;
frameWhiteBack.AddChidren(btnSwitch);
listControl.Add(btnSwitch);
btnSwitch.ButtonClickEvent += (sender, e) =>
{
//发送开关命令
this.SetSwitchCommand(!btnSwitch.IsSelected);
};
//设置初始状态
this.IsLightOpen = ((LightBase)this.device).OnOffStatus == 1;
this.canSetProgressValue = this.IsLightOpen;
if (IsLightOpen == true)
{
btnSwitch.IsSelected = true;
}
//彩灯控件里面的那个显示百分比的控件
int progressY = waveSeekBar.Y - Application.GetMinReal(154);
var btnProgress = new NormalViewControl(Application.GetMinReal(135), Application.GetMinReal(104), false);
btnProgress.Y = progressY;
btnProgress.UnSelectedImagePath = "Item/ProgressBubbles.png";
btnProgress.IsBold = true;
btnProgress.TextColor = UserCenterColor.Current.White;
btnProgress.Gravity = Gravity.CenterHorizontal;
btnProgress.TextAlignment = TextAlignment.Center;
frameWhiteBack.AddChidren(btnProgress);
btnProgress.Visible = false;
//开始滑动的事件
waveSeekBar.OnStartTrackingTouchEvent += (sender, e) =>
{
//进度值开始变更
this.isProgressing = true;
//变更进度百分比的显示
btnProgress.Y = progressY + waveSeekBar.NowProgressY;
btnProgress.Text = waveSeekBar.Progress + "%";
waveSeekBar.IsProgressTextShow = false;
if (btnProgress.Visible == false)
{
btnProgress.Visible = true;
}
};
//结束滑动的事件
waveSeekBar.OnStopTrackingTouchEvent += (sender, e) =>
{
//进度值开始结束
this.isProgressing = false;
btnProgress.Visible = false;
waveSeekBar.IsProgressTextShow = true;
};
//滑动过程中
int oldProgressValue = waveSeekBar.Progress;//之前的值
int nowProgressValue = oldProgressValue;//变更的值
waveSeekBar.OnProgressChangedEvent += (sender, value) =>
{
//变更进度百分比的显示
btnProgress.Y = progressY + waveSeekBar.NowProgressY;
btnProgress.Text = value + "%";
if (Common.Config.Instance.Home.IsVirtually == false)
{
nowProgressValue = value;
}
else
{
//如果住宅为虚拟住宅,直接改缓存
((ColorTemperatureLight)this.device).Level = value * MaxLevel / 100;
//亮度 XX
this.SetStatuText(Language.StringByID(R.MyInternationalizationString.uBrightness) + " " + HdlDeviceCommonLogic.Current.GetMainPageDeviceStatuText(this.device));
}
};
//色温
var btnColor = new NormalViewControl(300, 50, true);
btnColor.X = Application.GetRealWidth(132);
btnColor.Y = Application.GetRealHeight(829);
btnColor.TextSize = 12;
btnColor.Text = Language.StringByID(R.MyInternationalizationString.uColorTemperature) + ":";
btnColor.TextColor = UserCenterColor.Current.TextGrayColor3;
frameWhiteBack.AddChidren(btnColor);
//上部显示文本
var btnColorView = new NormalViewControl(150, 60, true);
btnColorView.Y = btnColor.Bottom;
btnColorView.TextAlignment = TextAlignment.Center;
btnColorView.TextSize = 15;
btnColorView.Gravity = Gravity.CenterHorizontal;
btnColorView.TextColor = UserCenterColor.Current.TextGrayColor3;
frameWhiteBack.AddChidren(btnColorView);
//进度条(色温的范围是 3400~6000)
var seekBar1 = new SeekBarControl(683);
seekBar1.Y = btnColorView.Bottom;
seekBar1.MinValue = 34;
seekBar1.MaxValue = 60;
seekBar1.ProgressBarColor = 0xff707070;
seekBar1.SeekBarViewHeight = Application.GetRealHeight(19);
frameWhiteBack.AddChidren(seekBar1);
int oldColorValue = 0;
int nowColorValue = 0;
seekBar1.ProgressChangedEvent += (div, value) =>
{
//数据变更
btnColorView.Text = value * 100 + "K";
if (Common.Config.Instance.Home.IsVirtually == false)
{
nowColorValue = value;
}
};
//设置初始值
int colorValue = ((ColorTemperatureLight)this.device).ColorTemperature;
if (colorValue == 0) { colorValue = 3400; }
seekBar1.Progress = colorValue / 100;
btnColorView.Text = colorValue + "K";
//开一个线程,监视是否滑动的滑动条,每秒检测一次
HdlThreadLogic.Current.RunThread(() =>
{
while (this.Parent != null)
{
System.Threading.Thread.Sleep(1000);
//能够发送
if (this.canSetProgressValue == true)
{
//发送亮度值
if (nowProgressValue != oldProgressValue)
{
oldProgressValue = nowProgressValue;
((ColorTemperatureLight)this.device).SetLevel((int)(oldProgressValue * MaxLevel / 100.0));
}
//发送色温值
if (nowColorValue != oldColorValue)
{
oldColorValue = nowColorValue;
((ColorTemperatureLight)this.device).SetColorTemperature(oldColorValue * 100);
}
}
}
//界面关闭时
if (nowProgressValue != oldProgressValue)
{
//发送亮度值
((ColorTemperatureLight)this.device).SetLevel((int)(nowProgressValue * MaxLevel / 100.0));
}
if (nowColorValue != oldColorValue)
{
//发送色温值
((ColorTemperatureLight)this.device).SetColorTemperature(nowColorValue * 100);
}
});
}
#endregion
#region ■ 发送开关命令_______________________
///
/// 发送开关命令
///
///
private void SetSwitchCommand(bool isOpen)
{
//获取当前亮度
int level = Convert.ToInt32(this.device.GetType().InvokeMember("Level", System.Reflection.BindingFlags.GetField, null, this.device, null));
//如果住宅是虚拟住宅
if (Common.Config.Instance.Home.IsVirtually == true)
{
((LightBase)this.device).OnOffStatus = isOpen == true ? 1 : 0;
if (((LightBase)this.device).OnOffStatus == 1 && level == 0)
{
//如果当前是打开状态,并且亮度为0的话,则需要变成100%亮度
this.device.GetType().InvokeMember("Level", System.Reflection.BindingFlags.SetField, null, this.device, new object[] { 100 });
}
//刷新开关状态
this.RefreshSwitchStatu(isOpen);
return;
}
//当按下开关按钮时,不能再发送进度值
this.canSetProgressValue = false;
//检测是否获取网关反馈的结果,如果网关没有回复,则会弹出消息
this.StartCheckResponeResult(this.listControl, (result) =>
{
HdlThreadLogic.Current.RunMain(() =>
{
bool statu = ((LightBase)this.device).OnOffStatus == 1;
//接收到网关回复
if (result == true)
{
//刷新开关状态
this.RefreshSwitchStatu(statu);
//状态取反
listControl[0].IsSelected = statu;
}
});
});
if (isOpen == true)
{
//打开
if (level == 0)
{
//如果当前是打开状态,并且亮度为0的话,则需要变成100%亮度
this.device.GetType().InvokeMember("SetLevel", System.Reflection.BindingFlags.InvokeMethod, null, this.device, new object[] { 254 });
}
else
{
this.device.SwitchControl(1);
}
}
else
{
//关闭
this.device.SwitchControl(0);
}
}
#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 (isOpen == true)
{
//亮度是必须要刷新的 亮度 XX
this.SetStatuText(Language.StringByID(R.MyInternationalizationString.uBrightness) + " " + HdlDeviceCommonLogic.Current.GetMainPageDeviceStatuText(this.device));
}
if (isOpen == false && this.IsLightOpen == true)
{
//状态不一样,才变更字样:关闭
this.SetStatuText(Language.StringByID(R.MyInternationalizationString.Close));
}
if (listControl[0].IsSelected != isOpen)
{
//开关状态变更
listControl[0].IsSelected = isOpen;
}
if (this.isProgressing == false)
{
//当进度值在手动变更中时,不接收推送
waveSeekBar.Progress = (int)(((ColorTemperatureLight)this.device).Level * 1.0 / MaxLevel * 100);
}
this.IsLightOpen = isOpen;
//回复的结果说,处于打开状态才能发送
this.canSetProgressValue = this.IsLightOpen;
}
#endregion
}
}