using System;
using System.Collections.Generic;
using System.Text;
using ZigBee.Device;
namespace Shared.Phone
{
///
/// 房间组合或者设备组合的菜单控件(完成初始化后,会根据默认选择调用回调函数)
///
public class RoomDeviceGroupMenuControl : FrameLayout
{
#region ■ 变量声明___________________________
///
/// 房间选择事件
///
public Action SelectRoomEvent = null;
///
/// 设备选择事件
///
public Action> SelectDeviceEvent = null;
///
/// 当前选择的主键(房间类型时:房间ID 设备类型时:文本信息)
///
public string nowSelectKeys
{
get
{
if (dicDevice != null)
{
int index = 0;
foreach (var rId in dicDevice.Keys)
{
if (index == oldSelectIndex)
{
return rId.ToString();
}
index++;
}
return string.Empty;
}
return listRoom[oldSelectIndex].Id;
}
}
///
/// 当前选择的索引(内部使用)
///
private int oldSelectIndex = -1;
///
/// 房间对象
///
private List listRoom = null;
///
/// 设备对象
///
private Dictionary> dicDevice = null;
///
/// 前回选择的控件
///
private FrameLayoutStatuControl oldFrameBack = null;
///
/// 前回选择的控件
///
private NormalViewControl oldBtnText = null;
#endregion
#region ■ 初始化_____________________________
///
/// 房间组合的菜单控件(完成初始化后,会根据默认选择调用回调函数)
///
/// 房间列表
public RoomDeviceGroupMenuControl(List i_listRoom)
{
this.listRoom = i_listRoom;
this.Height = Application.GetRealHeight(204);
}
///
/// 设备组合的菜单控件
///
/// 设备列表,keys:文本
public RoomDeviceGroupMenuControl(Dictionary> i_dicDevice)
{
this.dicDevice = i_dicDevice;
this.Height = Application.GetRealHeight(204);
}
///
/// 初始化控件(事件要至于它之前)
///
public void InitControl()
{
var scrolContr = new HorizontalScrolViewLayout();
scrolContr.Gravity = Gravity.CenterVertical;
scrolContr.Height = this.Height;
this.AddChidren(scrolContr);
//弄个空的进去占位置
var frameTemp = new FrameLayout();
frameTemp.Height = this.Height;
frameTemp.Width = HdlControlResourse.XXLeft / 2;
scrolContr.AddChidren(frameTemp);
var btnTempWidth = new ButtonBase();
btnTempWidth.TextSize = 12;
if (this.listRoom != null)
{
//初始化房间模式的控件
for (int i = 0; i < listRoom.Count; i++)
{
if (oldSelectIndex == -1)
{
//初始值
oldSelectIndex = i;
}
//计算字符的真实宽度
btnTempWidth.Text = listRoom[i].Name;
this.DoInitControl(scrolContr, i.ToString(), i, listRoom[i].Name, btnTempWidth.GetRealWidthByText());
}
}
else
{
//初始化设备模式的控件
int index = 0;
foreach (string strKeys in dicDevice.Keys)
{
if (oldSelectIndex == -1)
{
//初始值
oldSelectIndex = index;
}
//计算字符的真实宽度
btnTempWidth.Text = strKeys;
this.DoInitControl(scrolContr, strKeys, index, btnTempWidth.Text, btnTempWidth.GetRealWidthByText());
index++;
}
}
//让控件滑动到指定的索引位置
scrolContr.ScrollToViewIndex(oldSelectIndex + 1);
}
///
/// 初始化控件
///
/// 列表控件
/// 字典的主键
/// 索引
/// 显示文本
/// 文本真实宽度
private void DoInitControl(HorizontalScrolViewLayout scrolContr, string strKey, int index, string text, int textWidth)
{
//带底图控件的最小宽度
int minWidth = Application.GetRealWidth(255);
//带底图控件的真实宽度 <文字的宽度的计算 frameBack.Width - (int)(frameBack.Height * 0.47)>
int realWidth = textWidth + (int)(Application.GetRealHeight(159) * 0.47);
if (realWidth < minWidth)
{
realWidth = minWidth;
}
//带图片的
var frameBack = new FrameLayoutStatuControl();
frameBack.UseClickStatu = false;
frameBack.Gravity = Gravity.Center;
frameBack.Height = Application.GetRealHeight(159);
frameBack.Width = realWidth;
if (oldSelectIndex == index)
{
frameBack.BackgroundImagePath = "Item/RoomIconBackgroundSelected.png";
oldFrameBack = frameBack;
}
else
{
frameBack.BackgroundImagePath = "Item/RoomIconBackground.png";
}
scrolContr.AddChidren(frameBack);
//文字
var btnText = new NormalViewControl(textWidth, frameBack.Height, false);
btnText.Gravity = Gravity.CenterHorizontal;
btnText.Text = text;
btnText.TextSize = 12;
btnText.TextAlignment = TextAlignment.Center;
if (oldSelectIndex == index)
{
btnText.TextColor = UserCenterColor.Current.White;
oldBtnText = btnText;
}
else
{
btnText.TextColor = UserCenterColor.Current.TextGrayColor1;
}
frameBack.AddChidren(btnText, ChidrenBindMode.BindEvent);
frameBack.ButtonClickEvent += (sender, e) =>
{
if (oldSelectIndex == index)
{
//同一个东西
return;
}
oldSelectIndex = index;
//状态变更
frameBack.BackgroundImagePath = "Item/RoomIconBackgroundSelected.png";
btnText.TextColor = UserCenterColor.Current.White;
oldFrameBack.BackgroundImagePath = "Item/RoomIconBackground.png";
oldBtnText.TextColor = UserCenterColor.Current.TextGrayColor1;
oldFrameBack = frameBack;
oldBtnText = btnText;
//调用回调函数
if (this.dicDevice != null)
{
this.SelectDeviceEvent?.Invoke(this.dicDevice[strKey]);
}
else if (this.listRoom != null)
{
this.SelectRoomEvent?.Invoke(this.listRoom[Convert.ToInt32(strKey)]);
}
};
//调用回调函数
if (oldSelectIndex == index)
{
if (this.dicDevice != null)
{
this.SelectDeviceEvent?.Invoke(this.dicDevice[strKey]);
}
else if (this.listRoom != null)
{
this.SelectRoomEvent?.Invoke(this.listRoom[Convert.ToInt32(strKey)]);
}
}
}
#endregion
#region ■ 控件摧毁___________________________
///
/// 控件摧毁
///
public override void RemoveFromParent()
{
this.SelectDeviceEvent = null;
this.SelectRoomEvent = null;
base.RemoveFromParent();
}
#endregion
#region ■ 一般方法___________________________
///
/// 设置初始选择(请在初始化完成之前调用)
///
/// 房间ID 或者 文本信息
public void SetDefultIndex(string strKey)
{
if (listRoom != null)
{
for (int index = 0; index < listRoom.Count; index++)
{
if (listRoom[index].Id == strKey)
{
oldSelectIndex = index;
break;
}
}
}
else if (strKey != string.Empty)
{
int i = 0;
foreach (string rId in dicDevice.Keys)
{
if (rId == strKey)
{
oldSelectIndex = i;
break;
}
i++;
}
}
}
#endregion
}
}