using Shared;
|
using HDL_ON.UI.CSS;
|
using HDL_ON.Stan;
|
using System;
|
using System.Collections.Generic;
|
using System.Text;
|
using HDL_ON.Entity;
|
|
namespace HDL_ON.UI
|
{
|
/// <summary>
|
/// 门锁历史记录的筛选界面(不需要加入父控件)
|
/// </summary>
|
public class DoorLockHistoryTypeScreenPage : BottomDialogCommon
|
{
|
#region ■ 变量声明___________________________
|
|
/// <summary>
|
/// <para>[1]、选择的门锁品牌 all:全部</para>
|
/// <para>[2]、选择的用户 all:全部</para>
|
/// <para>[3]、选择的开锁方式 all:全部</para>
|
/// <para>[4]、选择的信息类型 all:全部 1:开锁信息 2:报警类信息</para>
|
/// </summary>
|
public Action<List<string>, List<string>, List<string>, List<string>> FinishEvent = null;
|
/// <summary>
|
/// 门锁设备,当不为null时,将会出现【锁的型号】的筛选选项
|
/// </summary>
|
private List<Function> listDevice = null;
|
/// <summary>
|
/// 成员列表
|
/// </summary>
|
private List<ResidenceMemberInfo> listMember = null;
|
/// <summary>
|
/// 默认选择的门锁品牌
|
/// </summary>
|
private List<string> listSelectSpk = null;
|
/// <summary>
|
/// 默认选择的用户
|
/// </summary>
|
private List<string> listSelectUser = null;
|
/// <summary>
|
/// 默认选择的开锁方式
|
/// </summary>
|
private List<string> listUnlock = null;
|
/// <summary>
|
/// 默认选择的信息类型
|
/// </summary>
|
private List<string> listMsgType = null;
|
|
#endregion
|
|
#region ■ 初始化_____________________________
|
|
/// <summary>
|
/// 门锁历史记录的筛选界面(不需要加入父控件)
|
/// </summary>
|
/// <param name="i_listDevice">门锁设备,当不为null时,将会出现【锁的型号】的筛选选项</param>
|
/// <param name="i_listMember">成员列表</param>
|
public DoorLockHistoryTypeScreenPage(List<Function> i_listDevice, List<ResidenceMemberInfo> i_listMember)
|
{
|
//之后会自动调整的
|
base.RowCount = 7;
|
//筛选
|
base.StrTitle = Language.StringByID(StringId.Screen);
|
|
this.listDevice = i_listDevice;
|
this.listMember = i_listMember;
|
}
|
|
/// <summary>
|
/// 初始化控件
|
/// </summary>
|
/// <param name="i_listSelectSpk">默认选择的门锁品牌</param>
|
/// <param name="i_listSelectUser">默认选择的用户</param>
|
/// <param name="i_listUnlock">默认选择的开锁方式</param>
|
/// <param name="i_listMsgType">默认选择的信息类型</param>
|
public void InitControl(List<string> i_listSelectSpk, List<string> i_listSelectUser, List<string> i_listUnlock, List<string> i_listMsgType)
|
{
|
//已经初始化
|
if (base.btnCancel != null) { return; }
|
|
//合并List集合
|
this.MergeList(ref this.listSelectSpk, i_listSelectSpk);
|
this.MergeList(ref this.listSelectUser, i_listSelectUser);
|
this.MergeList(ref this.listUnlock, i_listUnlock);
|
this.MergeList(ref this.listMsgType, i_listMsgType);
|
|
//初始化底层控件
|
var frameWhiteBack = base.InitBaseControl(Application.CurrentWidth, false);
|
//取消
|
base.btnCancel.ButtonClickEvent += (sender, e) =>
|
{
|
this.Close();
|
};
|
|
//确认
|
base.btnConfirm.ButtonClickEvent += (sender, e) =>
|
{
|
this.FinishEvent?.Invoke(listSelectSpk, listSelectUser, listUnlock, listMsgType);
|
this.Close();
|
};
|
//列表控件
|
var listView = new VerticalFrameControl();
|
listView.Y = btnConfirm.Bottom;
|
listView.Height = this.RowCount * this.RowHeight;
|
frameWhiteBack.AddChidren(listView);
|
|
//初始化列表控件
|
this.InitListControl(frameWhiteBack, listView);
|
}
|
|
/// <summary>
|
/// 初始化列表控件
|
/// </summary>
|
/// <param name="listView"></param>
|
private void InitListControl(NormalFrameLayout frameWhiteBack, VerticalFrameControl listView)
|
{
|
//初始Y轴为18
|
int yy = Application.GetRealHeight(18);
|
|
//初始化锁按钮
|
yy = this.InitLockButton(listView, yy);
|
if (this.listDevice != null && this.listDevice.Count > 0)
|
{
|
//如果listDevice不为null的话,需要 + 20
|
yy += Application.GetRealHeight(20);
|
}
|
|
//初始化用户按钮(返回最底部的坐标)
|
yy = this.InitUserButton(listView, yy);
|
|
//初始化开锁方式按钮(返回最底部的坐标)
|
yy = this.InitUnLockButton(listView, yy + Application.GetRealHeight(20));
|
|
//初始化信息类型按钮(返回最底部的坐标)
|
yy = this.InitMessageTypeButton(listView, yy + Application.GetRealHeight(20));
|
|
//再加上一个底部间距
|
var frameSpace = new FrameLayout();
|
frameSpace.Height = Application.GetRealHeight(16);
|
frameSpace.Y = yy;
|
listView.frameTable.AddChidren(frameSpace);
|
|
//调整一下高度
|
int realHeight = Application.GetRealHeight(500);
|
listView.AdjustTableHeight();
|
if (listView.frameTable.Height < realHeight)
|
{
|
//500为最大高度,如果比500小,则用当前的真实高度
|
realHeight = listView.frameTable.Height;
|
}
|
listView.Height = realHeight;
|
frameWhiteBack.Height = base.btnConfirm.Bottom + listView.Height;
|
//调整一下坐标
|
frameWhiteBack.Gravity = Gravity.BottomCenter;
|
}
|
|
#endregion
|
|
#region ■ 全部点击按钮_______________________
|
|
/// <summary>
|
/// 初始化锁按钮(返回最底部的坐标)
|
/// </summary>
|
/// <param name="listView">列表控件</param>
|
/// <param name="yy">初始Y轴坐标</param>
|
/// <returns></returns>
|
private int InitLockButton(VerticalFrameControl listView, int yy)
|
{
|
//获取所有门锁的品牌
|
var dicLockBrand = this.GetAllLockBrand();
|
if (dicLockBrand.Count > 0)
|
{
|
//控件集合
|
var listLockContr = new List<NormalViewControl>();
|
//锁
|
var btnLock = new NormalViewControl(150, 20, true);
|
btnLock.X = Application.GetRealHeight(24);
|
btnLock.Y = yy;
|
btnLock.TextID = StringId.Lock;
|
listView.frameTable.AddChidren(btnLock);
|
//全部
|
var btnContr1 = this.InitSelectButton(Language.StringByID(StringId.All), listLockContr, this.listSelectSpk, this.listSelectSpk.Contains("all"));
|
btnContr1.MainKey = "all";
|
listLockContr.Add(btnContr1);
|
foreach (var strSpk in dicLockBrand.Keys)
|
{
|
//初始化按钮
|
var btnContr2 = this.InitSelectButton(dicLockBrand[strSpk], listLockContr, this.listSelectSpk, this.listSelectSpk.Contains(strSpk));
|
btnContr2.MainKey = strSpk;
|
listLockContr.Add(btnContr2);
|
}
|
//放置所有的按钮到容器,返回最底部控件的底部坐标
|
yy = this.SetAllButtonToFrame(listView.frameTable, listLockContr, btnLock.Bottom + Application.GetRealHeight(8));
|
}
|
return yy;
|
}
|
|
/// <summary>
|
/// 初始化用户按钮(返回最底部的坐标)
|
/// </summary>
|
/// <param name="listView">列表控件</param>
|
/// <param name="yy">初始Y轴坐标</param>
|
/// <returns></returns>
|
private int InitUserButton(VerticalFrameControl listView, int yy)
|
{
|
//控件集合
|
var listContr = new List<NormalViewControl>();
|
//用户
|
var btnLock = new NormalViewControl(150, 20, true);
|
btnLock.X = Application.GetRealHeight(24);
|
btnLock.Y = yy;
|
btnLock.TextID = StringId.User;
|
listView.frameTable.AddChidren(btnLock);
|
//全部
|
var btnContr1 = this.InitSelectButton(Language.StringByID(StringId.All), listContr, this.listSelectUser, this.listSelectUser.Contains("all"));
|
btnContr1.MainKey = "all";
|
listContr.Add(btnContr1);
|
foreach (var info in this.listMember)
|
{
|
//初始化按钮
|
var btnContr2 = this.InitSelectButton(info.nickName, listContr, this.listSelectUser, this.listSelectUser.Contains(info.childAccountId));
|
btnContr2.MainKey = info.childAccountId;
|
listContr.Add(btnContr2);
|
}
|
//放置所有的按钮到容器,返回最底部控件的底部坐标
|
yy = this.SetAllButtonToFrame(listView.frameTable, listContr, btnLock.Bottom + Application.GetRealHeight(8));
|
return yy;
|
}
|
|
/// <summary>
|
/// 初始化开锁方式按钮(返回最底部的坐标)
|
/// </summary>
|
/// <param name="listView">列表控件</param>
|
/// <param name="yy">初始Y轴坐标</param>
|
/// <returns></returns>
|
private int InitUnLockButton(VerticalFrameControl listView, int yy)
|
{
|
//控件集合
|
var listContr = new List<NormalViewControl>();
|
//开锁方式
|
var btnLock = new NormalViewControl(150, 20, true);
|
btnLock.X = Application.GetRealHeight(24);
|
btnLock.Y = yy;
|
btnLock.TextID = StringId.UnlockingMode;
|
listView.frameTable.AddChidren(btnLock);
|
//全部
|
var btnContr1 = this.InitSelectButton(Language.StringByID(StringId.All), listContr, this.listUnlock, this.listUnlock.Contains("all"));
|
btnContr1.MainKey = "all";
|
listContr.Add(btnContr1);
|
//指纹
|
btnContr1 = this.InitSelectButton(Language.StringByID(StringId.Fingerprints), listContr, this.listUnlock, this.listUnlock.Contains("15"));
|
btnContr1.MainKey = "15";
|
listContr.Add(btnContr1);
|
//密码
|
btnContr1 = this.InitSelectButton(Language.StringByID(StringId.Password), listContr, this.listUnlock, this.listUnlock.Contains("0"));
|
btnContr1.MainKey = "0";
|
listContr.Add(btnContr1);
|
//卡
|
btnContr1 = this.InitSelectButton(Language.StringByID(StringId.Card), listContr, this.listUnlock, this.listUnlock.Contains("3"));
|
btnContr1.MainKey = "3";
|
listContr.Add(btnContr1);
|
//钥匙
|
btnContr1 = this.InitSelectButton(Language.StringByID(StringId.Key), listContr, this.listUnlock, this.listUnlock.Contains("key"));
|
btnContr1.MainKey = "key";
|
listContr.Add(btnContr1);
|
//常开
|
btnContr1 = this.InitSelectButton(Language.StringByID(StringId.AlwaysOn), listContr, this.listUnlock, this.listUnlock.Contains("9000"));
|
btnContr1.MainKey = "9000";
|
listContr.Add(btnContr1);
|
//临时密码开锁
|
btnContr1 = this.InitSelectButton(Language.StringByID(StringId.TemporaryPasswordUnlocking), listContr, this.listUnlock, this.listUnlock.Contains("temp"));
|
btnContr1.MainKey = "temp";
|
listContr.Add(btnContr1);
|
|
//放置所有的按钮到容器,返回最底部控件的底部坐标
|
yy = this.SetAllButtonToFrame(listView.frameTable, listContr, btnLock.Bottom + Application.GetRealHeight(8));
|
return yy;
|
}
|
|
/// <summary>
|
/// 初始化信息类型按钮(返回最底部的坐标)
|
/// </summary>
|
/// <param name="listView">列表控件</param>
|
/// <param name="yy">初始Y轴坐标</param>
|
/// <returns></returns>
|
private int InitMessageTypeButton(VerticalFrameControl listView, int yy)
|
{
|
//控件集合
|
var listContr = new List<NormalViewControl>();
|
//信息类型
|
var btnTitle = new NormalViewControl(150, 20, true);
|
btnTitle.X = Application.GetRealHeight(24);
|
btnTitle.Y = yy;
|
btnTitle.TextID = StringId.UnlockingMode;
|
listView.frameTable.AddChidren(btnTitle);
|
//全部
|
var btnContr1 = this.InitSelectButton(Language.StringByID(StringId.All), listContr, this.listMsgType, this.listMsgType.Contains("all"));
|
btnContr1.MainKey = "all";
|
listContr.Add(btnContr1);
|
//开锁信息
|
btnContr1 = this.InitSelectButton(Language.StringByID(StringId.UnlockingMessage), listContr, this.listMsgType, this.listMsgType.Contains("1"));
|
btnContr1.MainKey = "1";
|
listContr.Add(btnContr1);
|
//报警类信息
|
btnContr1 = this.InitSelectButton(Language.StringByID(StringId.AlarmMessage), listContr, this.listMsgType, this.listMsgType.Contains("2"));
|
btnContr1.MainKey = "2";
|
listContr.Add(btnContr1);
|
|
//放置所有的按钮到容器,返回最底部控件的底部坐标
|
yy = this.SetAllButtonToFrame(listView.frameTable, listContr, btnTitle.Bottom + Application.GetRealHeight(8));
|
|
return yy;
|
}
|
|
#endregion
|
|
#region ■ 初始化点击按钮_____________________
|
|
/// <summary>
|
/// 初始化点击按钮
|
/// </summary>
|
/// <param name="i_text">显示的文本</param>
|
/// <param name="listContr">生成的按钮集合,在生成UI过程中,请勿使用,因为它还没有完成</param>
|
/// <param name="listSelect">选择的主键</param>
|
/// <param name="select">是否初始选择</param>
|
/// <returns></returns>
|
private NormalViewControl InitSelectButton(string i_text, List<NormalViewControl> listContr, List<string> listSelectKey, bool select)
|
{
|
var btnContr = new NormalViewControl(98, 44, true);
|
btnContr.Radius = (uint)Application.GetRealWidth(8);
|
btnContr.TextAlignment = TextAlignment.Center;
|
btnContr.Text = i_text;
|
//设置按钮状态
|
this.SetButtonStatu(btnContr, select);
|
|
btnContr.ButtonClickEvent += (sender, e) =>
|
{
|
var value = btnContr.MainKey;
|
//取消
|
if (listSelectKey.Contains(value) == true)
|
{
|
if (value == "all" || listSelectKey.Count == 1)
|
{
|
//不能取消【全部】,并且至少要选择一个
|
return;
|
}
|
//设置按钮状态
|
this.SetButtonStatu(btnContr, false);
|
listSelectKey.Remove(value);
|
}
|
//选择
|
else
|
{
|
//设置按钮状态
|
this.SetButtonStatu(btnContr, true);
|
if (value == "all")
|
{
|
//【所有】按钮处于选择状态时,【所有】放在第0位索引
|
for (int i = 1; i < listContr.Count; i++)
|
{
|
//设置按钮状态
|
this.SetButtonStatu(listContr[i], false);
|
//移除选择
|
listSelectKey.Remove(listContr[i].MainKey);
|
}
|
}
|
else if (listSelectKey.Contains("all") == true)
|
{
|
//所有按钮取消,【所有放在第0位索引】
|
this.SetButtonStatu(listContr[0], false);
|
listSelectKey.Remove("all");
|
}
|
listSelectKey.Add(value);
|
}
|
};
|
|
return btnContr;
|
}
|
|
#endregion
|
|
#region ■ 放置所有按钮_______________________
|
|
/// <summary>
|
/// 放置所有的按钮到容器,返回最底部控件的底部坐标
|
/// </summary>
|
/// <param name="frameBack">容器</param>
|
/// <param name="listContr">列表控件</param>
|
/// <param name="i_yy">初始Y轴</param>
|
private int SetAllButtonToFrame(FrameLayout frameBack, List<NormalViewControl> listContr, int i_yy)
|
{
|
//初始X轴
|
int defultXX = Application.GetRealWidth(24);
|
int nowXX = defultXX;
|
//按钮间的间距
|
int space = Application.GetRealWidth(16);
|
//按钮最大宽度
|
int maxWidth = Application.GetRealWidth(98) * 2 + space;
|
//按钮最小宽度
|
int minWidth = Application.GetRealWidth(98);
|
|
//桌布的宽度
|
int tableWidth = frameBack.Width - nowXX * 2;
|
|
int bottomY = 0;
|
foreach (var contr in listContr)
|
{
|
//计算它的真实宽度,但是不能超过最大宽度
|
int realWidth = contr.GetRealWidthByText();
|
if (realWidth >= maxWidth)
|
{
|
//最大宽度
|
realWidth = maxWidth;
|
}
|
else if (realWidth <= minWidth)
|
{
|
//最小宽度
|
realWidth = minWidth;
|
}
|
else
|
{
|
//如果它介于最小和最大之间,则用它的真实值+10,让它左右有点间距,即使超过,应该也没啥事
|
realWidth += Application.GetRealWidth(10);
|
}
|
contr.Width = realWidth;
|
frameBack.AddChidren(contr);
|
|
//再计算加上它有没有超过右边界(需要减掉初始X轴)
|
if (nowXX + realWidth - defultXX <= tableWidth)
|
{
|
//没有超过边界,可以直接添加
|
contr.X = nowXX;
|
contr.Y = i_yy;
|
}
|
else
|
{
|
//如果超过了边界,则换行,重置X轴,Y轴向下推移
|
contr.X = defultXX;
|
contr.Y = i_yy + contr.Height + space;
|
i_yy = contr.Y;
|
}
|
//X轴往右推移
|
nowXX = contr.Right + space;
|
//底部坐标(返回值)
|
bottomY = contr.Bottom;
|
}
|
return bottomY;
|
}
|
|
#endregion
|
|
#region ■ 一般方法___________________________
|
|
/// <summary>
|
/// 获取所有门锁的品牌
|
/// </summary>
|
/// <returns></returns>
|
private Dictionary<string, string> GetAllLockBrand()
|
{
|
if (this.listDevice == null || this.listDevice.Count == 0)
|
{
|
return new Dictionary<string, string>();
|
}
|
|
var dicData = new Dictionary<string, string>();
|
foreach (var device in this.listDevice)
|
{
|
if (device.spk == "door.sone")
|
{
|
dicData[device.spk] = "S-ONE";
|
continue;
|
}
|
}
|
return dicData;
|
}
|
|
/// <summary>
|
/// 设置按钮状态
|
/// </summary>
|
/// <param name="btnContr">控件</param>
|
/// <param name="select">是否是选择状态</param>
|
private void SetButtonStatu(NormalViewControl btnContr, bool select)
|
{
|
if (select == false)
|
{
|
btnContr.TextColor = CSS_Color.FirstLevelTitleColor;
|
btnContr.BackgroundColor = CSS_Color.MainBackgroundColor;
|
btnContr.BorderWidth = 1;
|
btnContr.BorderColor = CSS_Color.PromptingColor1;
|
}
|
else
|
{
|
btnContr.TextColor = CSS_Color.MainBackgroundColor;
|
btnContr.BackgroundColor = CSS_Color.MainColor;
|
btnContr.BorderWidth = 0;
|
btnContr.BorderColor = CSS_Color.viewTranslucence;
|
}
|
}
|
|
/// <summary>
|
/// 合并List集合
|
/// </summary>
|
/// <param name="listTarget"></param>
|
/// <param name="listSource"></param>
|
private void MergeList(ref List<string> listTarget, List<string> listSource)
|
{
|
if (listSource == null) { return; }
|
if (listTarget == null)
|
{
|
listTarget = new List<string>();
|
}
|
listTarget.AddRange(listSource);
|
if (listTarget.Count == 0)
|
{
|
listTarget.Add("all");
|
}
|
}
|
|
/// <summary>
|
/// 关闭界面
|
/// </summary>
|
public override void Close()
|
{
|
base.Close();
|
this.FinishEvent = null;
|
}
|
|
#endregion
|
}
|
}
|