xm
2020-12-14 d6fb0646531172f23648441c224cdcccd721b894
ZigbeeApp/Shared/Phone/UserCenter/Safety/AlarmTargetStatuSelectAcForm.cs
New file
@@ -0,0 +1,381 @@
using System;
using System.Collections.Generic;
using System.Text;
using ZigBee.Device;
namespace Shared.Phone.UserCenter.Safety
{
    /// <summary>
    /// 空调类的安防报警设置界面
    /// </summary>
    public class AlarmTargetStatuSelectAcForm : DialogCommonForm
    {
        #region ■ 变量声明___________________________
        /// <summary>
        /// 结束选择的事件(key:全部状态的翻译文本)
        /// </summary>
        public Action<string, List<Safeguard.TaskListInfo>> FinishSelectEvent = null;
        /// <summary>
        /// 动作信息
        /// </summary>
        private Dictionary<int, Safeguard.TaskListInfo> dicTaskinfo = new Dictionary<int, Safeguard.TaskListInfo>();
        #endregion
        #region ■ 初始化_____________________________
        /// <summary>
        /// 画面显示(底层会固定调用此方法,借以完成画面创建)
        /// </summary>
        /// <param name="device"></param>
        /// <param name="i_listTaskInfo"></param>
        public void ShowForm(CommonDevice device, List<Safeguard.TaskListInfo> i_listTaskInfo)
        {
            if (i_listTaskInfo != null)
            {
                foreach (var data in i_listTaskInfo)
                {
                    //以防万一,剔除不合法数据
                    if (data.TaskType == 5)
                    {
                        dicTaskinfo[data.Data1] = data;
                    }
                }
            }
            //初始化中部信息
            this.InitMiddleFrame(device);
        }
        /// <summary>
        /// 初始化中部信息
        /// </summary>
        private void InitMiddleFrame(CommonDevice device)
        {
            //瞎搞的一个白框
            var frameBack = new FrameLayout();
            frameBack.BackgroundColor = UserCenterColor.Current.White;
            frameBack.Height = Application.GetRealHeight(1092);
            frameBack.SetCornerWithSameRadius(Application.GetRealHeight(58), HDLUtils.RectCornerTopLeft | HDLUtils.RectCornerTopRight);
            frameBack.Gravity = Gravity.BottomCenter;
            bodyFrameLayout.AddChidren(frameBack);
            //头部信息
            var btnTitle = new NormalViewControl(frameBack.Width, Application.GetRealHeight(65), false);
            btnTitle.Y = Application.GetRealHeight(34);
            btnTitle.Text = Common.LocalDevice.Current.GetDeviceEpointName(device);
            btnTitle.TextColor = UserCenterColor.Current.TextColor4;
            btnTitle.TextSize = 16;
            btnTitle.TextAlignment = TextAlignment.Center;
            frameBack.AddChidren(btnTitle);
            //取消
            var btnCancel = new NormalViewControl(200, 60, true);
            btnCancel.X = Application.GetRealWidth(81);
            btnCancel.Y = Application.GetRealHeight(39);
            btnCancel.TextColor = UserCenterColor.Current.TextGrayColor1;
            btnCancel.TextID = R.MyInternationalizationString.uCancel;
            frameBack.AddChidren(btnCancel);
            btnCancel.ButtonClickEvent += (sender, e) =>
            {
                this.CloseForm();
            };
            //完成
            var btnFinish = new NormalViewControl(200, 60, true);
            btnFinish.X = Application.GetRealWidth(800);
            btnFinish.Y = Application.GetRealHeight(39);
            btnFinish.TextAlignment = TextAlignment.CenterRight;
            btnFinish.TextColor = 0xfffb744a;
            btnFinish.TextID = R.MyInternationalizationString.uFinish;
            frameBack.AddChidren(btnFinish);
            //线
            var btnLine1 = new NormalViewControl(frameBack.Width, ControlCommonResourse.BottomLineHeight, false);
            btnLine1.Y = Application.GetRealHeight(138);
            btnLine1.BackgroundColor = UserCenterColor.Current.ButtomLine;
            frameBack.AddChidren(btnLine1);
            //开
            var rowOpen = new FrameRowControl();
            rowOpen.Y = btnLine1.Bottom + Application.GetRealHeight(69);
            rowOpen.LeftOffset = Application.GetRealWidth(81) - ControlCommonResourse.XXLeft;
            rowOpen.RightOffset = ControlCommonResourse.XXLeft - Application.GetRealWidth(81);
            frameBack.AddChidren(rowOpen);
            var btnOpen = rowOpen.AddLeftCaption(Language.StringByID(R.MyInternationalizationString.uSimpleOpen), 400);
            btnOpen.TextColor = UserCenterColor.Current.TextGrayColor3;
            var btnOpenSelect = rowOpen.AddMostRightEmptyIcon(58, 58);
            btnOpenSelect.UnSelectedImagePath = "Item/ItemSelected.png";
            btnOpenSelect.Visible = false;
            //底线
            var btnOpenLine = rowOpen.AddBottomLine();
            //空调配置选择空间
            var pickerView = new UIPickerView();
            pickerView.Y = rowOpen.Bottom;
            pickerView.Height = Application.GetRealHeight(564);
            frameBack.AddChidren(pickerView);
            //这里加一个遮罩,让它不能点击
            var framePickerShaw = new FrameLayout();
            framePickerShaw.Y = pickerView.Y;
            framePickerShaw.Height = pickerView.Height;
            framePickerShaw.BackgroundColor = 0x60ffffff;
            frameBack.AddChidren(framePickerShaw);
            //恒温器 Data1(数值): 0加热/1制冷/2自动调节/3 设置工作模式/4 设置加热度数 5/设置制冷度数 6/设置风扇模式
            //恒温器Data2数值如下:
            //【当Data1=0|1|2时,Data2为要变化的度数,单位:0.1℃ 。】
            //【若Data1=3,Data2为要设定的空调模式(0-9),0:off,1:auto,3:cool, 4:heat ,5:emergency heating, 6:precooling,7:fan only ,8:dry,9:sleep。】
            //【若Data1=4|5,Data2为加热或制冷度数,单位0.01摄氏度。】
            //【若Data1=6,Data2为要设定的风扇模式(0-6),0:off,1:low,2:medium,3:high,4:on,5:auto,6:smart】
            var listTemperature = new List<int>();
            var listTemperatureStr = new List<string>();
            for (int i = 16; i <= 32; i++)
            {
                listTemperature.Add(i);
                listTemperatureStr.Add($"{i} ℃");
            }
            //模式
            var listMode = new List<int> { 1, 3, 4, 7, 8 };
            var listModeStr = new List<string> {
                Language.StringByID(R.MyInternationalizationString.Mode_Auto),
                Language.StringByID(R.MyInternationalizationString.Mode_Cool),
                Language.StringByID(R.MyInternationalizationString.Mode_Heat),
                Language.StringByID(R.MyInternationalizationString.Mode_FanOnly),
                Language.StringByID(R.MyInternationalizationString.Mode_Dry)
            };
            //风速
            var listFan = new List<int> { 1, 2, 3 };
            var listFanStr = new List<string> {
                Language.StringByID(R.MyInternationalizationString.Fan_Low),
                Language.StringByID(R.MyInternationalizationString.Fan_Middle),
                Language.StringByID(R.MyInternationalizationString.Fan_Height)
            };
            pickerView.setNPicker(listTemperatureStr, listModeStr, listFanStr);
            //空调控件默认为灰色
            pickerView.setTextColorCenter(UserCenterColor.Current.TextGrayColor1, 0);
            pickerView.setTextColorCenter(UserCenterColor.Current.TextGrayColor1, 1);
            pickerView.setTextColorCenter(UserCenterColor.Current.TextGrayColor1, 2);
            //控件选择事件
            int selectTemperatureIndex = 0;
            int selectModelIndex = 0;
            int selectFanIndex = 0;
            pickerView.OnSelectChangeEvent = (value1, value2, value3) =>
            {
                //更改索引
                selectTemperatureIndex = value1;
                selectModelIndex = value2;
                selectFanIndex = value3;
            };
            //底线
            var btnPickerLine = new NormalViewControl(btnOpenLine.Width, ControlCommonResourse.BottomLineHeight, false);
            btnPickerLine.X = btnOpenLine.X;
            btnPickerLine.Y = pickerView.Bottom;
            btnPickerLine.BackgroundColor = UserCenterColor.Current.ButtomLine;
            frameBack.AddChidren(btnPickerLine);
            //关
            var rowClose = new FrameRowControl();
            rowClose.Y = btnPickerLine.Bottom + Application.GetRealHeight(12);
            rowClose.LeftOffset = Application.GetRealWidth(81) - ControlCommonResourse.XXLeft;
            rowClose.RightOffset = ControlCommonResourse.XXLeft - Application.GetRealWidth(81);
            frameBack.AddChidren(rowClose);
            var btnClose = rowClose.AddLeftCaption(Language.StringByID(R.MyInternationalizationString.uSimpleClose), 400);
            btnClose.TextColor = UserCenterColor.Current.TextGrayColor3;
            var btnCloseSelect = rowClose.AddMostRightEmptyIcon(58, 58);
            btnCloseSelect.UnSelectedImagePath = "Item/ItemSelected.png";
            btnCloseSelect.Visible = false;
            //点击开
            rowOpen.ButtonClickEvent += (sender, e) =>
            {
                if (btnOpenSelect.Visible == true)
                {
                    //空调控件特效
                    pickerView.setTextColorCenter(UserCenterColor.Current.TextGrayColor1, 0);
                    pickerView.setTextColorCenter(UserCenterColor.Current.TextGrayColor1, 1);
                    pickerView.setTextColorCenter(UserCenterColor.Current.TextGrayColor1, 2);
                    pickerView.setCurrentItems(selectTemperatureIndex, selectModelIndex, selectFanIndex);
                    framePickerShaw.Visible = true;
                    //取消,开 不可用
                    btnOpenSelect.Visible = false;
                    btnOpen.TextColor = UserCenterColor.Current.TextGrayColor3;
                }
                else
                {
                    //空调控件特效
                    pickerView.setTextColorCenter(UserCenterColor.Current.TextColor1, 0);
                    pickerView.setTextColorCenter(UserCenterColor.Current.TextColor1, 1);
                    pickerView.setTextColorCenter(UserCenterColor.Current.TextColor1, 2);
                    pickerView.setCurrentItems(selectTemperatureIndex, selectModelIndex, selectFanIndex);
                    framePickerShaw.Visible = false;
                    //选择图标切换
                    btnOpenSelect.Visible = true;
                    btnCloseSelect.Visible = false;
                    //开 可用
                    btnOpen.TextColor = UserCenterColor.Current.TextColor1;
                    //关 不可用
                    btnClose.TextColor = UserCenterColor.Current.TextGrayColor3;
                }
            };
            //点击关
            rowClose.ButtonClickEvent += (sender, e) =>
            {
                if (framePickerShaw.Visible == false)
                {
                    //空调控件特效
                    pickerView.setTextColorCenter(UserCenterColor.Current.TextGrayColor1, 0);
                    pickerView.setTextColorCenter(UserCenterColor.Current.TextGrayColor1, 1);
                    pickerView.setTextColorCenter(UserCenterColor.Current.TextGrayColor1, 2);
                    pickerView.setCurrentItems(selectTemperatureIndex, selectModelIndex, selectFanIndex);
                    framePickerShaw.Visible = true;
                }
                if (btnCloseSelect.Visible == true)
                {
                    //取消,关 不可用
                    btnCloseSelect.Visible = false;
                    btnClose.TextColor = UserCenterColor.Current.TextGrayColor3;
                }
                else
                {
                    //选择图标切换
                    btnCloseSelect.Visible = true;
                    btnOpenSelect.Visible = false;
                    //关 可用
                    btnClose.TextColor = UserCenterColor.Current.TextColor1;
                    //开 不可用
                    btnOpen.TextColor = UserCenterColor.Current.TextGrayColor3;
                }
            };
            //检测空调的打开状态 0:关闭 1:打开
            int openStatu = -1;
            foreach (var data1 in dicTaskinfo.Keys)
            {
                var Taskinfo = dicTaskinfo[data1];
                if (data1 == 3)
                {
                    if (Taskinfo.Data2 == 0)
                    {
                        //关状态
                        openStatu = 0;
                    }
                    else
                    {
                        //模式
                        selectModelIndex = listMode.IndexOf(Taskinfo.Data2);
                        openStatu = 1;
                    }
                }
                else if (data1 == 6)
                {
                    //风速
                    selectFanIndex = listFan.IndexOf(Taskinfo.Data2);
                    openStatu = 1;
                }
                if (data1 == 4 || data1 == 5)
                {
                    //温度
                    selectTemperatureIndex = listTemperature.IndexOf(Taskinfo.Data2 / 100);
                    openStatu = 1;
                }
            }
            //设置开的默认值
            if (openStatu == 1)
            {
                //设置空调的初始值
                pickerView.setCurrentItems(selectTemperatureIndex, selectModelIndex, selectFanIndex);
                rowOpen.ButtonClickEvent?.Invoke(null, null);
            }
            else if (openStatu == 0)
            {
                rowClose.ButtonClickEvent?.Invoke(null, null);
            }
            //完成事件
            btnFinish.ButtonClickEvent += (sender, e) =>
            {
                var listData = new List<Safeguard.TaskListInfo>();
                //关
                if (btnCloseSelect.Visible == true)
                {
                    var taskInfo = new Safeguard.TaskListInfo();
                    taskInfo.TaskType = 5;
                    taskInfo.Data1 = 3;
                    taskInfo.Data2 = 0;
                    listData.Add(taskInfo);
                }
                //开
                else if (btnOpenSelect.Visible == true)
                {
                    //送风
                    var taskInfo = new Safeguard.TaskListInfo();
                    taskInfo.TaskType = 5;
                    taskInfo.Data1 = 6;
                    taskInfo.Data2 = listFan[selectFanIndex];
                    listData.Add(taskInfo);
                    //模式
                    var taskInfo2 = new Safeguard.TaskListInfo();
                    taskInfo2.TaskType = 5;
                    taskInfo2.Data1 = 3;
                    taskInfo2.Data2 = listMode[selectModelIndex];
                    listData.Add(taskInfo2);
                    //温度
                    var taskInfo3 = new Safeguard.TaskListInfo();
                    taskInfo3.TaskType = 5;
                    taskInfo3.Data2 = listTemperature[selectTemperatureIndex] * 100;
                    //1:自动 3:制冷 4:制热 7:送风 8:除湿
                    //自动
                    if (listMode[selectModelIndex] == 1)
                    {
                        taskInfo3.Data1 = 7;
                        listData.Add(taskInfo3);
                    }
                    //制热
                    else if (listMode[selectModelIndex] == 4)
                    {
                        taskInfo3.Data1 = 4;
                        listData.Add(taskInfo3);
                    }
                    //制冷,除湿默认都是 制冷
                    else if (listMode[selectModelIndex] == 3 || listMode[selectModelIndex] == 8)
                    {
                        taskInfo3.Data1 = 5;
                        listData.Add(taskInfo3);
                    }
                    //送风没有温度的概念
                }
                //获取状态的显示文本
                string statuText = HdlSafeguardLogic.Current.GetAdjustTargetStatuText(listData);
                this.FinishSelectEvent(statuText, listData);
                this.CloseForm();
            };
        }
        #endregion
        #region ■ 界面关闭___________________________
        /// <summary>
        /// 界面关闭
        /// </summary>
        public override void CloseFormBefore()
        {
            this.FinishSelectEvent = null;
            base.CloseFormBefore();
        }
        #endregion
    }
}