黄学彪
2020-09-22 ade5917841b0fdcb1df7353ef7c56b1a1bdc9282
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
using Shared.Phone.UserCenter;
using System;
using System.Collections.Generic;
using System.Text;
using ZigBee.Device;
 
namespace Shared.Phone.MainPage.Controls
{
    /// <summary>
    /// 窗帘卡片控件
    /// </summary>
    public class DeviceCurtainCardControl : DeviceCardCommon
    {
        #region ■ 初始化_____________________________
 
        /// <summary>
        /// 初始化控件
        /// </summary>
        /// <param name="i_device"></param>
        public override void InitControl(CommonDevice i_device, Common.Room i_nowSelectRoom)
        {
            base.InitControl(i_device, i_nowSelectRoom);
 
            //添加跳转深度卡片信息事件
            this.AddDetailInfoEvent(i_device);
 
            //添加开关控件
            var btnSwitch = this.AddSwitchControl();
            btnSwitch.ButtonClickEvent += (sender, e) =>
            {
                //如果住宅为虚拟住宅
                if (Common.Config.Instance.Home.IsVirtually == true)
                {
                    //直接变更缓存
                    ((Rollershade)i_device).WcdCurrentPositionLiftPercentage = btnSwitch.IsSelected == true ? 0 : 100;
                    this.RefreshControlInfo(this.device);
                    return;
                }
 
                bool setStatu = !btnSwitch.IsSelected;
                //变更卡片状态
                this.SetCardOpenStatu(setStatu);
                //检测是否获取网关反馈的结果,如果网关没有回复,则会弹出消息
                this.StartCheckResponeResult(!setStatu);
 
                if (setStatu == true)
                {
                    //打开
                    this.SetDeviceStatuText(Language.StringByID(R.MyInternationalizationString.uOpen1));
                    (i_device as Rollershade).CurtainUpDownStopControl(0);
                }
                else
                {
                    //关闭
                    this.SetDeviceStatuText(Language.StringByID(R.MyInternationalizationString.Close));
                    (i_device as Rollershade).CurtainUpDownStopControl(1);
                }
            };
        }
 
        #endregion
 
        #region ■ 深度卡片信息_______________________
 
        /// <summary>
        /// 添加跳转深度卡片信息事件
        /// </summary>
        private void AddDetailInfoEvent(CommonDevice i_device)
        {
            //深度卡片信息
            this.ButtonClickEvent += (sender, e) =>
            {
                Common.CommonPage.Instance.IsDrawerLockMode = true;
                //窗帘类型的深度卡片界面
                var form = new ControlForm.DeviceCurtainDetailCardForm();
                form.RowOrCardControl = this;
                form.AddForm(i_device, this.nowSelectRoom, 965, 1316);
                form.FormCloseEvent += this.CardDetailInfoBackEvent;
            };
        }
 
        #endregion
 
        #region ■ 检测设备打开状态___________________
 
        /// <summary>
        /// 检测设备打开状态
        /// </summary>
        /// <param name="i_device"></param>
        /// <returns></returns>
        public override bool CheckIsOpenStatu(CommonDevice i_device)
        {
            return ((Rollershade)i_device).WcdCurrentPositionLiftPercentage > 0;
        }
 
        #endregion
 
        #region ■ 发送获取状态命令___________________
 
        /// <summary>
        /// 发送获取状态命令
        /// </summary>
        public override void SendStatuComand()
        {
            if (Common.Config.Instance.Home.IsVirtually == true)
            {
                //如果住宅为虚拟住宅,则此功能无效
                return;
            }
            //检测能否发送获取状态命令
            if (this.CheckCanSendStatuComand() == true)
            {
                HdlDeviceAttributeLogic.Current.SendCurtainStatuComand(this.device);
            }
            if (((Rollershade)this.device).WcdType == -1)
            {
                //读取窗帘类型
                ((Rollershade)this.device).ReadWcdType();
            }
        }
 
        #endregion
    }
}