using Shared.Common;
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
using ZigBee.Device;
namespace Shared.Phone.UserCenter.DeviceCurtain
{
///
/// 卷帘的上下限位的配置界面
///
public class SiphonateDirectionAndLimitSettionForm : EditorCommonForm
{
#region ■ 变量声明___________________________
///
///窗帘的回路
///
private Rollershade curtainDevice = null;
///
/// 窗帘数据
///
private CurtainData curtainData = null;
///
/// 列表控件
///
private VerticalListControl listView = null;
#endregion
#region ■ 初始化_____________________________
///
/// 画面显示(底层会固定调用此方法,借以完成画面创建)
///
/// 窗帘的回路
public void ShowForm(Rollershade i_CurtainDevice)
{
this.curtainDevice = i_CurtainDevice;
//设置标题信息
base.SetTitleText(Language.StringByID(R.MyInternationalizationString.uDirectionAndLimit));
HdlThreadLogic.Current.RunThread(() =>
{
//初始化中部控件
this.InitMiddleFrame();
});
}
///
/// 初始化中部信息
///
private void InitMiddleFrame()
{
//获取设备初始数据
var result = this.InitCurtainDefultData();
if (result == false)
{
//显示重新加载的界面
this.ShowReLoadView();
return;
}
HdlThreadLogic.Current.RunMain(() =>
{
//清空bodyFrame
bodyFrameLayout.BackgroundColor = UserCenterColor.Current.White;
this.ClearBodyFrame();
this.listView = new VerticalListControl(29);
listView.Y = Application.GetRealHeight(-6);
listView.Height = bodyFrameLayout.Height;
bodyFrameLayout.AddChidren(listView);
//添加方向行
this.AddDirectionRow();
//添加限位行
this.AddLimitRow();
//添加重置电机行
this.AddElectricalMachineryRow();
//保存
var btnSave = new BottomClickButton();
btnSave.TextID = R.MyInternationalizationString.uSave;
bodyFrameLayout.AddChidren(btnSave);
btnSave.ButtonClickEvent += (sender, e) =>
{
//这个保存没啥意义
this.CloseForm();
};
});
}
#endregion
#region ■ 方向行_____________________________
///
/// 添加方向行
///
private void AddDirectionRow()
{
var rowDirection = new FrameRowControl(listView.rowSpace / 2);
listView.AddChidren(rowDirection);
//方向
rowDirection.AddLeftCaption(Language.StringByID(R.MyInternationalizationString.uDirection), 600);
//右箭头
rowDirection.AddRightArrow();
//状态
var btnStatu = rowDirection.AddMostRightView("", 300);
btnStatu.TextID = curtainData.Direction == false ? R.MyInternationalizationString.uForwardDirection : R.MyInternationalizationString.uReverseDirection;
//底线
rowDirection.AddBottomLine();
int nowSelectNo = curtainData.Direction == false ? 0 : 1;
rowDirection.ButtonClickEvent += (sender, e) =>
{
var listText = new List();
listText.Add(Language.StringByID(R.MyInternationalizationString.uForwardDirection));//正向
listText.Add(Language.StringByID(R.MyInternationalizationString.uReverseDirection));//反向
var form = new BottomItemSelectForm();
form.AddForm(Language.StringByID(R.MyInternationalizationString.uDirectionSelect), listText, nowSelectNo);
form.FinishSelectEvent += (index) =>
{
//变更方向
var result = HdlDeviceCurtainLogic.Current.SetCurtainDirection(curtainDevice, index == 0 ? false : true);
if (result == false)
{
return;
}
nowSelectNo = index;
btnStatu.Text = listText[index];
curtainData.Direction = index == 0 ? false : true;
};
};
}
#endregion
#region ■ 限位行_____________________________
///
/// 添加限位行
///
private void AddLimitRow()
{
var frameBack = new FrameLayout();
frameBack.Height = Application.GetRealHeight(714);
var rowLimit = new FrameRowControl(listView.rowSpace / 2);
rowLimit.UseClickStatu = false;
listView.AddChidren(rowLimit);
//限位
rowLimit.AddLeftCaption(Language.StringByID(R.MyInternationalizationString.uLimit), 600);
//右箭头
var btnRinght = rowLimit.AddMostRightEmptyIcon(58, 58);
rowLimit.ChangedChidrenBindMode(btnRinght, ChidrenBindMode.NotBind);
btnRinght.UseClickStatu = false;
btnRinght.UnSelectedImagePath = "Item/RightNext.png";
btnRinght.SelectedImagePath = "Item/Down.png";
btnRinght.IsSelected = true;
btnRinght.ButtonClickEvent += (sender, e) =>
{
btnRinght.IsSelected = !btnRinght.IsSelected;
//展开折叠
frameBack.Height = frameBack.Height > 10 ? 0 : Application.GetRealHeight(714);
};
//底线
rowLimit.AddBottomLine();
listView.AddChidren(frameBack);
//添加下限位控件
this.AddDownLimitControl(frameBack);
//添加开限位控件
this.AddUpLimitControl(frameBack);
}
///
/// 添加下限位控件
///
///
private void AddDownLimitControl(FrameLayout frameBack)
{
var frameIcon = new FrameLayout();
frameIcon.X = Application.GetRealWidth(228);
frameIcon.Y = Application.GetRealHeight(121);
frameIcon.Width = this.GetPictrueRealSize(265);
frameIcon.Height= this.GetPictrueRealSize(495);
frameIcon.BackgroundImagePath = "Item/DeviceLimitGround.png";
frameBack.AddChidren(frameIcon);
var frameIconback = new FrameLayoutStatuControl();
frameIconback.Height = this.GetPictrueRealSize(144);
frameIconback.Width = this.GetPictrueRealSize(144);
frameIconback.Radius = (uint)this.GetPictrueRealSize(144) / 2;
frameIconback.BackgroundColor = 0xffeff2fb;
frameIconback.Gravity = Gravity.CenterHorizontal;
frameIconback.Y = this.GetPictrueRealSize(35);
frameIcon.AddChidren(frameIconback);
var btnIcon = new NormalViewControl(this.GetPictrueRealSize(69), this.GetPictrueRealSize(35), false);
btnIcon.UnSelectedImagePath = "Item/DownTriangle.png";
btnIcon.Gravity = Gravity.Center;
frameIconback.AddChidren(btnIcon, ChidrenBindMode.BindEvent);
var frameText = new FrameLayoutStatuControl();
frameText.Y= this.GetPictrueRealSize(265);
frameText.Height = this.GetPictrueRealSize(120);
frameIcon.AddChidren(frameText);
//确定
var btnOk = new NormalViewControl(frameIcon.Width, this.GetPictrueRealSize(60), false);
btnOk.TextID = R.MyInternationalizationString.uConfirm1;
btnOk.TextAlignment = TextAlignment.Center;
btnOk.TextColor = UserCenterColor.Current.TextOrangeColor;
frameText.AddChidren(btnOk, ChidrenBindMode.BindEvent);
//底线
var btnLine1 = new NormalViewControl(this.GetPictrueRealSize(100), ControlCommonResourse.BottomLineHeight, false);
btnLine1.BackgroundColor = UserCenterColor.Current.TextOrangeColor;
btnLine1.Gravity = Gravity.CenterHorizontal;
btnLine1.Y = btnOk.Bottom - this.GetPictrueRealSize(8);
frameText.AddChidren(btnLine1);
//下限位
var btnDown = new NormalViewControl(frameIcon.Width, this.GetPictrueRealSize(60), false);
btnDown.TextID = R.MyInternationalizationString.uDownLimit;
btnDown.Y = btnOk.Bottom;
btnDown.TextAlignment = TextAlignment.Center;
btnDown.TextColor = UserCenterColor.Current.TextOrangeColor;
frameText.AddChidren(btnDown, ChidrenBindMode.BindEvent);
//底线
var btnLine2 = new NormalViewControl(this.GetPictrueRealSize(124), ControlCommonResourse.BottomLineHeight, false);
btnLine2.BackgroundColor = UserCenterColor.Current.TextOrangeColor;
btnLine2.Gravity = Gravity.CenterHorizontal;
btnLine2.Y = btnDown.Bottom - this.GetPictrueRealSize(8);
frameText.AddChidren(btnLine2);
//图标点击
frameIconback.ButtonClickEvent += (sender, e) =>
{
curtainDevice.CurtainUpDownStopControl(1);
};
//重写控件点击效果
frameIconback.SelectStatuEvent += (select) =>
{
if (select == true)
{
frameIconback.BackgroundColor = 0xfffef1ed;
}
else
{
frameIconback.BackgroundColor = 0xffeff2fb;
}
};
//限位确定
frameText.ButtonClickEvent += (sender, e) =>
{
//确认当前位置为下限位?
string msg = Language.StringByID(R.MyInternationalizationString.uCommitCurtainDownLimitMsg);
this.ShowMassage(ShowMsgType.Confirm, msg, async () =>
{
//执行确定及覆盖
await HdlDeviceCurtainLogic.Current.CommitCurtainLimitPoint(curtainDevice, Rollershade.CurtainPrivateInstalledLimi.DownLimit, -1, -1);
});
};
//重写控件点击效果
frameText.SelectStatuEvent += (select) =>
{
if (select == true)
{
frameIconback.BackgroundColor = UserCenterColor.Current.White;
btnOk.TextColor = UserCenterColor.Current.White;
btnDown.TextColor = UserCenterColor.Current.White;
frameIcon.BackgroundImagePath = "Item/DeviceLimitGroundSelected.png";
}
else
{
frameIconback.BackgroundColor = 0xffeff2fb;
btnOk.TextColor = UserCenterColor.Current.TextOrangeColor;
btnDown.TextColor = UserCenterColor.Current.TextOrangeColor;
frameIcon.BackgroundImagePath = "Item/DeviceLimitGround.png";
}
};
}
///
/// 添加上限位控件
///
///
private void AddUpLimitControl(FrameLayout frameBack)
{
var frameIcon = new FrameLayout();
frameIcon.X = Application.GetRealWidth(619);
frameIcon.Y = Application.GetRealHeight(121);
frameIcon.Width = this.GetPictrueRealSize(265);
frameIcon.Height = this.GetPictrueRealSize(495);
frameIcon.BackgroundImagePath = "Item/DeviceLimitGround.png";
frameBack.AddChidren(frameIcon);
var frameIconback = new FrameLayoutStatuControl();
frameIconback.Height = this.GetPictrueRealSize(144);
frameIconback.Width = this.GetPictrueRealSize(144);
frameIconback.Radius = (uint)this.GetPictrueRealSize(144) / 2;
frameIconback.BackgroundColor = 0xffeff2fb;
frameIconback.Gravity = Gravity.CenterHorizontal;
frameIconback.Y = this.GetPictrueRealSize(35);
frameIcon.AddChidren(frameIconback);
var btnIcon = new NormalViewControl(this.GetPictrueRealSize(69), this.GetPictrueRealSize(35), false);
btnIcon.UnSelectedImagePath = "Item/UpTriangle.png";
btnIcon.Gravity = Gravity.Center;
frameIconback.AddChidren(btnIcon, ChidrenBindMode.BindEvent);
var frameText = new FrameLayoutStatuControl();
frameText.Y = this.GetPictrueRealSize(265);
frameText.Height = this.GetPictrueRealSize(120);
frameIcon.AddChidren(frameText);
//确定
var btnOk = new NormalViewControl(frameIcon.Width, this.GetPictrueRealSize(60), false);
btnOk.TextID = R.MyInternationalizationString.uConfirm1;
btnOk.TextAlignment = TextAlignment.Center;
btnOk.TextColor = UserCenterColor.Current.TextOrangeColor;
frameText.AddChidren(btnOk, ChidrenBindMode.BindEvent);
//底线
var btnLine1 = new NormalViewControl(this.GetPictrueRealSize(100), ControlCommonResourse.BottomLineHeight, false);
btnLine1.BackgroundColor = UserCenterColor.Current.TextOrangeColor;
btnLine1.Gravity = Gravity.CenterHorizontal;
btnLine1.Y = btnOk.Bottom - this.GetPictrueRealSize(8);
frameText.AddChidren(btnLine1);
//上限位
var btnDown = new NormalViewControl(frameIcon.Width, this.GetPictrueRealSize(60), false);
btnDown.TextID = R.MyInternationalizationString.uUpLimit;
btnDown.Y = btnOk.Bottom;
btnDown.TextAlignment = TextAlignment.Center;
btnDown.TextColor = UserCenterColor.Current.TextOrangeColor;
frameText.AddChidren(btnDown, ChidrenBindMode.BindEvent);
//底线
var btnLine2 = new NormalViewControl(this.GetPictrueRealSize(124), ControlCommonResourse.BottomLineHeight, false);
btnLine2.BackgroundColor = UserCenterColor.Current.TextOrangeColor;
btnLine2.Gravity = Gravity.CenterHorizontal;
btnLine2.Y = btnDown.Bottom - this.GetPictrueRealSize(8);
frameText.AddChidren(btnLine2);
//图标点击
frameIconback.ButtonClickEvent += (sender, e) =>
{
curtainDevice.CurtainUpDownStopControl(0);
};
//重写控件点击效果
frameIconback.SelectStatuEvent += (select) =>
{
if (select == true)
{
frameIconback.BackgroundColor = 0xfffef1ed;
}
else
{
frameIconback.BackgroundColor = 0xffeff2fb;
}
};
//限位确定
frameText.ButtonClickEvent += (sender, e) =>
{
//确认当前位置为上限位?
string msg = Language.StringByID(R.MyInternationalizationString.uCommitCurtainUpLimitMsg);
this.ShowMassage(ShowMsgType.Confirm, msg, async () =>
{
//执行确定及覆盖
await HdlDeviceCurtainLogic.Current.CommitCurtainLimitPoint(curtainDevice, Rollershade.CurtainPrivateInstalledLimi.UpLimit, -1, -1);
});
};
//重写控件点击效果
frameText.SelectStatuEvent += (select) =>
{
if (select == true)
{
frameIconback.BackgroundColor = UserCenterColor.Current.White;
btnOk.TextColor = UserCenterColor.Current.White;
btnDown.TextColor = UserCenterColor.Current.White;
frameIcon.BackgroundImagePath = "Item/DeviceLimitGroundSelected.png";
}
else
{
frameIconback.BackgroundColor = 0xffeff2fb;
btnOk.TextColor = UserCenterColor.Current.TextOrangeColor;
btnDown.TextColor = UserCenterColor.Current.TextOrangeColor;
frameIcon.BackgroundImagePath = "Item/DeviceLimitGround.png";
}
};
}
#endregion
#region ■ 重置电机___________________________
///
/// 添加重置电机行
///
private void AddElectricalMachineryRow()
{
var rowReset = new FrameRowControl(listView.rowSpace / 2);
listView.AddChidren(rowReset);
//重置电机
rowReset.AddLeftCaption(Language.StringByID(R.MyInternationalizationString.uResetElectricalMachinery), 600);
//底线
rowReset.AddBottomLine();
rowReset.ButtonClickEvent += (sender, e) =>
{
//重置电机将初始化{0}方向与限位设置,确认继续?
string msg = Language.StringByID(R.MyInternationalizationString.uResetElectricalMachineryMsg);
msg = msg.Replace("{0}", "\r\n");
this.ShowMassage(ShowMsgType.Confirm, msg, () =>
{
HdlThreadLogic.Current.RunThread(async () =>
{
//重置窗帘
var result = await HdlDeviceCurtainLogic.Current.RestoreCurtain(curtainDevice);
if (result == false)
{
return;
}
//重新初始化界面
this.InitMiddleFrame();
});
});
};
}
#endregion
#region ■ 初始化窗帘数据_____________________
///
/// 初始化窗帘数据
///
///
private bool InitCurtainDefultData()
{
//开启进度条
this.ShowProgressBar();
this.curtainData = new CurtainData();
bool receiptData = false;
string mainkeys = LocalDevice.Current.GetDeviceMainKeys(curtainDevice);
HdlGatewayReceiveLogic.Current.AddAttributeEvent("CurtainDeviceAttribute", ReceiveComandDiv.A设备属性上报, (device) =>
{
string checkKey = LocalDevice.Current.GetDeviceMainKeys(device);
if (mainkeys != checkKey || device.DeviceStatusReport.CluterID != 258)
{
return;
}
foreach (var attriBute in device.DeviceStatusReport.AttriBute)
{
if (attriBute.AttributeId == 23)
{
//开合帘方向
if (0 < (attriBute.AttriButeData & 0x01))
{
//反向
curtainData.Direction = true;
}
else
{
//正向
curtainData.Direction = false;
}
//数据接收结束
receiptData = true;
}
}
});
//发送获取窗帘限位配置的命令
HdlDeviceCurtainLogic.Current.SetGetCurtainLimitSettionComand(curtainDevice);
int timeCount = 30;
while (receiptData == false && timeCount >= 0)
{
System.Threading.Thread.Sleep(100);
timeCount--;
}
//关闭进度条
this.CloseProgressBar();
if (timeCount <= 0)
{
//获取窗帘方向与限位设置失败
string msg = Language.StringByID(R.MyInternationalizationString.uGetCurtainDirectionAndLimitSettionFail);
//拼接上【网关回复超时】的Msg
msg = UserCenterLogic.CombineGatewayTimeOutMsg(msg, null, "回复超时");
this.ShowMassage(ShowMsgType.Tip, msg);
return false;
}
//移除监听
HdlGatewayReceiveLogic.Current.RemoveEvent("CurtainDeviceAttribute");
return true;
}
#endregion
#region ■ 界面关闭___________________________
///
/// 界面关闭
///
public override void CloseFormBefore()
{
HdlGatewayReceiveLogic.Current.RemoveEvent("CurtainDeviceAttribute");
base.CloseFormBefore();
}
#endregion
#region ■ 结构体_____________________________
///
/// 窗帘数据
///
private class CurtainData
{
///
/// false:电机方向正向;true:电机方向反向
///
public bool Direction = false;
}
#endregion
}
}