using System;
using System.Collections.Generic;
using System.Text;
using ZigBee.Device;
namespace Shared.Phone.UserCenter.DevicePanel
{
///
/// 按键面板的指示灯配置的菜单界面★
///
public class PanelPilolightSettionForm : UserCenterCommonForm
{
#region ■ 变量声明___________________________
///
/// 按键面板的回路设备
///
private Panel panel = null;
///
/// 指示灯状态区分 1:正常状态 2:点击后的状态
///
private StatuMode PilolightStatu = StatuMode.Normal;
///
/// 图标控件
///
private Dictionary dicIconContr = new Dictionary();
///
/// 选择的RGB
///
private List listRGB = null;
///
/// 按键原来的颜色数据
///
private Panel.KeyColorData keyColorData = null;
///
/// 颜色选择的打勾控件
///
private IconViewControl btnCheckContr = null;
///
/// 备选颜色的FrameLayout
///
private FrameLayout defultColorFrame = null;
#endregion
#region ■ 初始化_____________________________
///
/// 画面显示(底层会固定调用此方法,借以完成画面创建)
///
/// 按键面板的回路设备
/// 指示灯状态区分 1:正常状态 2:点击后的状态
public void ShowForm(Panel i_panel, StatuMode i_statu)
{
this.panel = i_panel;
this.PilolightStatu = i_statu;
this.dicIconContr.Clear();
if (i_statu == StatuMode.Normal)
{
//设置头部信息:正常状态
base.SetTitleText(Language.StringByID(R.MyInternationalizationString.uNormalStatu));
}
else if (i_statu == StatuMode.ClickStatu)
{
//设置头部信息:点击后的状态
base.SetTitleText(Language.StringByID(R.MyInternationalizationString.uAfterClickStatu));
}
//完成
var btnfinish = new TopLayoutFinshView();
topFrameLayout.AddChidren(btnfinish);
btnfinish.MouseUpEventHandler += (sender, e) =>
{
if (listRGB == null)
{
this.CloseForm();
return;
}
//将颜色设置到面板
this.SetSelectColorToPanel();
};
//初始化中部信息
this.InitMiddleFrame();
}
///
/// 初始化中部信息
///
private void InitMiddleFrame()
{
//初始化颜色圆盘控件
var frame = this.InitColorPictrueControl();
//初始化备用颜色的控件
this.InitSpareColorControl(frame);
//从网关获取颜色信息然后设置到界面
this.GetColorAndSetToForm();
}
#endregion
#region ■ 初始化颜色圆盘_____________________
///
/// 初始化颜色圆盘控件
///
private FrameLayout InitColorPictrueControl()
{
//颜色调节
var btnMsg = new ViewNormalControl(800, true);
btnMsg.X = ControlCommonResourse.XXLeft;
btnMsg.Y = Application.GetRealHeight(40);
btnMsg.TextID = R.MyInternationalizationString.uColorRegulation;
bodyFrameLayout.AddChidren(btnMsg);
//圆盘控件的FrameLayout
var frame = new FrameLayout();
frame.Y = btnMsg.Bottom + Application.GetRealHeight(50);
frame.Width = Application.GetMinRealAverage(720);
frame.Height = Application.GetRealHeight(720);
frame.Gravity = Gravity.CenterHorizontal;
bodyFrameLayout.AddChidren(frame);
//圆盘控件
var colorPic = new ColorPicker();
colorPic.ColorImagePath = "Item/PickerColorWheel.png";
frame.AddChidren(colorPic);
//白点控件
var btnWhiteView = new IconViewControl(20);
btnWhiteView.Visible = false;
btnWhiteView.BackgroundColor = UserCenterColor.Current.White;
btnWhiteView.Radius = (uint)Application.GetMinRealAverage(20) / 2;
frame.AddChidren(btnWhiteView);
colorPic.ColorChaged += (sender, eColor) =>
{
listRGB = new List();
listRGB.Add(Convert.ToInt32(Convert.ToString(eColor[0])));
listRGB.Add(Convert.ToInt32(Convert.ToString(eColor[1])));
listRGB.Add(Convert.ToInt32(Convert.ToString(eColor[2])));
this.dicIconContr["Defult"].BackgroundColor = this.GetColorByRGB(eColor[0], eColor[1], eColor[2]);
this.dicIconContr["Defult"].Tag = listRGB;
//显示打勾选择颜色的控件
this.ShowSelectColorControl(this.dicIconContr["Defult"]);
};
colorPic.MouseDownEventHandler += (sender, e) =>
{
//显示白点
btnWhiteView.X = (int)e.X;
btnWhiteView.Y = (int)e.Y;
btnWhiteView.Visible = true;
};
return frame;
}
#endregion
#region ■ 将颜色设置到面板___________________
///
/// 将选择的颜色设置到面板
///
private async void SetSelectColorToPanel()
{
if (PilolightStatu == StatuMode.Normal)
{
this.keyColorData.CloseColorR = Convert.ToString(listRGB[0], 16);
this.keyColorData.CloseColorG = Convert.ToString(listRGB[1], 16);
this.keyColorData.CloseColorB = Convert.ToString(listRGB[2], 16);
}
else
{
this.keyColorData.OpenColorR = Convert.ToString(listRGB[0], 16);
this.keyColorData.OpenColorG = Convert.ToString(listRGB[1], 16);
this.keyColorData.OpenColorB = Convert.ToString(listRGB[2], 16);
}
//设置按键面板指定端点的【指示灯开关颜色】的信息
var result = await Common.LocalDevice.Current.SetPanelEpointColorInfo(this.panel, this.keyColorData);
if (result == false)
{
return;
}
Application.RunOnMainThread(() =>
{
this.CloseForm();
});
}
#endregion
#region ■ 从网关获取颜色信息_________________
///
/// 从网关获取颜色信息然后设置到界面
///
private async void GetColorAndSetToForm()
{
//开启进度条
this.ShowProgressBar();
this.keyColorData = await Common.LocalDevice.Current.GetPanelEpointColorInfo(this.panel);
if (this.keyColorData == null)
{
//关闭进度条
this.CloseProgressBar(ShowReLoadMode.YES);
return;
}
//关闭进度条
this.CloseProgressBar();
int R = PilolightStatu == StatuMode.Normal ? Convert.ToInt32(this.keyColorData.CloseColorR, 16) : Convert.ToInt32(this.keyColorData.OpenColorR, 16);
int G = PilolightStatu == StatuMode.Normal ? Convert.ToInt32(this.keyColorData.CloseColorG, 16) : Convert.ToInt32(this.keyColorData.OpenColorG, 16);
int B = PilolightStatu == StatuMode.Normal ? Convert.ToInt32(this.keyColorData.CloseColorB, 16) : Convert.ToInt32(this.keyColorData.OpenColorB, 16);
//设置背景色
string keys = this.GetColorKeys(R, G, B);
if (this.dicIconContr.ContainsKey(keys) == false)
{
keys = "Defult";
}
uint backColor = this.GetColorByRGB((byte)R, (byte)G, (byte)B);
Application.RunOnMainThread(() =>
{
this.dicIconContr[keys].BackgroundColor = backColor;
//显示打勾选择颜色的控件
this.ShowSelectColorControl(this.dicIconContr[keys]);
});
}
#endregion
#region ■ 初始化预选颜色_____________________
///
/// 初始化备用颜色的控件
///
/// 颜色圆盘控件的FrameLayout
private void InitSpareColorControl(FrameLayout frame)
{
//控件大小
int size = Application.GetMinRealAverage(100);
//控件数
var dicColor = this.InitSpareDefultColor();
int controlCount = dicColor.Count;
//控件间的间隔
int space = (bodyFrameLayout.Width - controlCount * size) / (controlCount + 1);
//比颜色控件高一点
this.defultColorFrame = new FrameLayout();
this.defultColorFrame.Height = Application.GetRealHeight(120);
this.defultColorFrame.Y = frame.Bottom + Application.GetRealHeight(120);
bodyFrameLayout.AddChidren(this.defultColorFrame);
foreach (var keys in dicColor.Keys)
{
//添加图标
var btnIcon = this.AddColorIconControl(this.defultColorFrame, dicColor[keys], size, space);
this.dicIconContr[keys] = btnIcon;
}
}
///
/// 添加一个显示颜色的控件
///
/// 父容器
/// RGB
/// 图标大小
/// 控件间隔
private IconViewControl AddColorIconControl(FrameLayout frame, List litColor, int size, int Space)
{
byte R = (byte)litColor[0];
byte G = (byte)litColor[1];
byte B = (byte)litColor[2];
var btnColor = new IconViewControl(size, false);
btnColor.Tag = litColor;
btnColor.Radius = 5;
btnColor.BorderWidth = 1;
btnColor.Gravity = Gravity.CenterVertical;
btnColor.BorderColor = UserCenterColor.Current.TextFrameColor;
btnColor.BackgroundColor = this.GetColorByRGB(R, G, B);
//计算X轴坐标
int XX = Space;
var myView = frame.GetChildren(frame.ChildrenCount - 1);
if (myView != null)
{
XX = myView.Right + Space;
}
btnColor.X = XX;
frame.AddChidren(btnColor);
//单击颜色
btnColor.MouseUpEventHandler += (sender, e) =>
{
this.listRGB = (List)btnColor.Tag;
//显示打勾选择颜色的控件
this.ShowSelectColorControl(btnColor);
};
return btnColor;
}
///
/// 显示打勾选择颜色的控件
///
///
private void ShowSelectColorControl(IconViewControl control)
{
if (this.btnCheckContr == null)
{
this.btnCheckContr = new IconViewControl();
this.btnCheckContr.InitAvgSize(72, 61);
this.btnCheckContr.UnSelectedImagePath = "Item/Check.png";
this.defultColorFrame.AddChidren(this.btnCheckContr);
}
int XX = control.X + (control.Width - this.btnCheckContr.Width) / 2;
this.btnCheckContr.X = XX;
this.btnCheckContr.Gravity = Gravity.CenterVertical;
}
#endregion
#region ■ 一般方法___________________________
///
/// 初始化备用颜色的默认值
///
///
private Dictionary> InitSpareDefultColor()
{
var dic = new Dictionary>();
dic["Defult"] = new List() { 208, 199, 186 };
dic["114-182-216"] = new List() { 114, 182, 216 };
dic["224-144-218"] = new List() { 224, 144, 218 };
dic["232-235-195"] = new List() { 232, 235, 195 };
dic["212-156-197"] = new List() { 212, 156, 197 };
dic["178-229-236"] = new List() { 178, 229, 236 };
return dic;
}
///
/// 将RGB转换为颜色
///
///
///
///
///
private uint GetColorByRGB(byte R, byte G, byte B)
{
return (uint)(0xFF000000 + R * 256 * 256 + G * 256 + B);
}
///
/// 获取字典颜色的主键
///
///
///
private string GetColorKeys(byte[] listRGB)
{
int R = Convert.ToInt32(Convert.ToString(listRGB[0]));
int G = Convert.ToInt32(Convert.ToString(listRGB[1]));
int B = Convert.ToInt32(Convert.ToString(listRGB[2]));
return this.GetColorKeys(R, G, B);
}
///
/// 获取字典颜色的主键
///
///
///
///
///
private string GetColorKeys(int R, int G, int B)
{
return R + "-" + G + "-" + B;
}
#endregion
}
}