HDL Home App 第二版本 旧平台金堂用 正在使用
wjc
2022-12-01 351bdda734832d821a9764b0cde8be5d83c4ec50
ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlControlLogic.cs
New file
@@ -0,0 +1,310 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace Shared.Phone.UserCenter
{
    /// <summary>
    /// 控件的逻辑
    /// </summary>
    public class HdlControlLogic
    {
        #region ■ 变量声明___________________________
        /// <summary>
        /// 控件的逻辑
        /// </summary>
        private static HdlControlLogic m_Current = null;
        /// <summary>
        /// 控件的逻辑
        /// </summary>
        public static HdlControlLogic Current
        {
            get
            {
                if (m_Current == null)
                {
                    m_Current = new HdlControlLogic();
                }
                return m_Current;
            }
        }
        #endregion
        #region ■ 计算控件真实大小___________________
        /// <summary>
        /// 计算图片的真实高宽度
        /// </summary>
        /// <param name="i_size"></param>
        /// <returns></returns>
        public int GetPictrueRealSize(int i_size)
        {
            return Application.GetRealWidth(i_size);
        }
        /// <summary>
        /// 计算真实宽度(可能以后会变动,所以声明出来有用处)
        /// </summary>
        /// <param name="i_size"></param>
        /// <returns></returns>
        public int GetRealWidth(int i_size)
        {
            return Application.GetRealWidth(i_size);
        }
        /// <summary>
        /// 计算真实高度度(可能以后会变动,所以声明出来有用处)
        /// </summary>
        /// <param name="i_size"></param>
        /// <returns></returns>
        public int GetRealHeight(int i_size)
        {
            return Application.GetRealHeight(i_size);
        }
        /// <summary>
        /// 计算真实大小(这个东西有特殊用处,考虑到加长型屏幕的控件,调用此方法)
        /// </summary>
        /// <param name="i_size"></param>
        /// <returns></returns>
        public int GetRealSizeEx(int i_size)
        {
            return Application.GetRealWidth(i_size);
        }
        #endregion
        #region ■ 显示底部弹窗的房间列表_____________
        /// <summary>
        /// 显示底部弹窗的房间列表(当还没有房间时,会返回false)
        /// </summary>
        /// <param name="RoomKey">默认选择的房间主键</param>
        /// <param name="titleText">标题信息</param>
        /// <param name="SelectRoomEvent">确认选择房间的回调函数(房间ID,房间名(会拼上楼层))</param>
        public bool ShowBottomListRoomView(string RoomKey, string titleText, Action<string, string> SelectRoomEvent)
        {
            //楼层列表名字
            var listFloorName = new List<string>();
            //楼层列表主键
            var listFloorKeys = new List<string>();
            //房间名字
            var listRoomName = new List<List<string>>();
            //房间主键
            var listRoomKeys = new List<List<string>>();
            //初始化房间列表数据
            bool result = this.InitRoomListData(ref listFloorName, ref listFloorKeys, ref listRoomName, ref listRoomKeys);
            if (result == false)
            {
                return false;
            }
            var room = HdlRoomLogic.Current.GetRoomById(RoomKey);
            int index1 = room != null ? listFloorKeys.IndexOf(room.FloorId) : 0;
            if (index1 == -1) { index1 = 0; }
            int index2 = listRoomKeys[index1].IndexOf(RoomKey);
            if (index2 == -1) { index2 = 0; }
            if (listFloorKeys.Count == 0)
            {
                //无楼层模式
                PickerView.Show(listRoomName[0], (value) =>
                {
                    RoomKey = listRoomKeys[0][value];
                    string roomName = string.Empty;
                    if (RoomKey != string.Empty)
                    {
                        //房间
                        roomName = listRoomName[0][value];
                    }
                    else
                    {
                        roomName = Language.StringByID(R.MyInternationalizationString.uDeviceNotAssignedRoom);
                    }
                    SelectRoomEvent?.Invoke(RoomKey, roomName);
                }, index2, titleText,
                Language.StringByID(R.MyInternationalizationString.uFinish),
                Language.StringByID(R.MyInternationalizationString.uCancel));
            }
            else
            {
                //有楼层模式
                PickerView.ShowSecondary(listFloorName, listRoomName, (value1, value2) =>
                {
                    RoomKey = listRoomKeys[value1][value2];
                    string roomName = string.Empty;
                    if (RoomKey != string.Empty)
                    {
                        //楼层+房间
                        roomName = listFloorName[value1] + " " + listRoomName[value1][value2];
                    }
                    else
                    {
                        roomName = Language.StringByID(R.MyInternationalizationString.uDeviceNotAssignedRoom);
                    }
                    SelectRoomEvent?.Invoke(RoomKey, roomName);
                }, index1, index2, titleText,
                Language.StringByID(R.MyInternationalizationString.uFinish),
                Language.StringByID(R.MyInternationalizationString.uCancel));
            }
            return true;
        }
        /// <summary>
        /// 初始化房间列表数据
        /// </summary>
        /// <param name="listFloorName">楼层列表名字</param>
        /// <param name="listFloorKeys">楼层列表主键</param>
        /// <param name="listRoomName">房间名字</param>
        /// <param name="listRoomKeys">房间主键</param>
        private bool InitRoomListData(ref List<string> listFloorName, ref List<string> listFloorKeys, ref List<List<string>> listRoomName, ref List<List<string>> listRoomKeys)
        {
            var dicFloor = HdlRoomLogic.Current.GetFloorSortList();
            if (dicFloor.Count == 0)
            {
                //第一位默认添加未分配
                var listKeys = new List<string>() { "" };
                var listName = new List<string>() { Language.StringByID(R.MyInternationalizationString.uUndistributed) };
                //房间名字和主键收集
                var listRoom = HdlRoomLogic.Current.GetFloorSortRoom(string.Empty, false);
                foreach (var myRoom in listRoom)
                {
                    listName.Add(myRoom.Name);
                    listKeys.Add(myRoom.Id);
                }
                listRoomName.Add(listName);
                listRoomKeys.Add(listKeys);
            }
            else
            {
                //第一位默认添加未分配(未分配放在楼层那个菜单)
                var listKeys = new List<string>() { "" };
                var listName = new List<string>() { "" };
                listRoomName.Add(listName);
                listRoomKeys.Add(listKeys);
                listFloorKeys.Add("");
                listFloorName.Add(Language.StringByID(R.MyInternationalizationString.uUndistributed));
                foreach (string fKeys in dicFloor.Keys)
                {
                    var listRoom = HdlRoomLogic.Current.GetFloorSortRoom(fKeys, false);
                    if (listRoom.Count > 0)
                    {
                        //楼层名字和主键收集
                        listFloorKeys.Add(fKeys);
                        listFloorName.Add(dicFloor[fKeys]);
                        //房间名字和主键收集
                        listName = new List<string>();
                        listKeys = new List<string>();
                        foreach (var myRoom in listRoom)
                        {
                            listName.Add(myRoom.Name);
                            listKeys.Add(myRoom.Id);
                        }
                        listRoomName.Add(listName);
                        listRoomKeys.Add(listKeys);
                    }
                }
            }
            //没有建立房间
            if (listFloorKeys.Count == 0 && listRoomKeys.Count == 0)
            {
                return false;
            }
            return true;
        }
        #endregion
        #region ■ 显示底部弹窗的房间列表_____________
        /// <summary>
        /// 显示底部弹窗的时间列表
        /// </summary>
        /// <param name="hKey">选择的时间主键</param>
        /// <param name="mKey">选择的分钟主键</param>
        /// <param name="titleText">标题信息</param>
        /// <param name="SelectTimeEvent">确认选择时间的回调函数 </param>
        /// <param name="type">晾衣架时间 :1烘干,2:风干;3消毒</param>
        public bool ShowBottomListTimeView(string hKey, string mKey, string titleText, Action<string, string> SelectTimeEvent, int type)
        {
            //小时列表名字
            var listHourName = new List<string>();
            //小时列表主键
            var listHourKeys = new List<string>();
            //分钟名字
            var listMinName = new List<List<string>>();
            //分钟主键
            var listMinKeys = new List<List<string>>();
            var listKeys = new List<string>() { "" };
            var listName = new List<string>() { "" };
            if (type == 3)
            {
                //名字和键收集
                for (int i = 1; i < 31; i++)
                {
                    listName.Add(i.ToString());
                    listKeys.Add(i.ToString());
                }
                listMinName.Add(listName);
                listMinKeys.Add(listKeys);
            }
            else
            {
                //名字和键收集
                for (int i = 0; i < 4; i++)
                {
                    listHourName.Add(i.ToString());
                    listHourKeys.Add((i + 1).ToString());
                }
                for (int i = 0; i < 60; i++)
                {
                    listName.Add(i.ToString());
                    listKeys.Add((i + 1).ToString());
                }
                listMinName.Add(listName);
                listMinKeys.Add(listKeys);
            }
            int index1 = hKey != null ? int.Parse(hKey) : 0;
            int index2 = mKey != null ? int.Parse(mKey) : 0;
            if (type == 3)
            {
                //只有分钟,消毒时间
                PickerView.Show(
                    listMinName[0],
                    (value) =>
                    {
                        mKey = listMinKeys[0][value];
                        SelectTimeEvent?.Invoke(mKey, listMinKeys[0][value]);
                    },
                    index2,
                    titleText,
                Language.StringByID(R.MyInternationalizationString.uFinish),
                Language.StringByID(R.MyInternationalizationString.uCancel));
            }
            else
            {
                //有小时,分钟
                PickerView.ShowSecondary(listHourName, listMinName, (value1, value2) =>
                {
                    mKey = listMinKeys[value1][value2];
                    string name = listHourName[value1] + " " + listMinName[value1][value2];
                    SelectTimeEvent?.Invoke(mKey, name);
                }, index1, index2, titleText,
                Language.StringByID(R.MyInternationalizationString.uFinish),
                Language.StringByID(R.MyInternationalizationString.uCancel));
            }
            return true;
        }
        #endregion
    }
}