using System; using System.Collections.Generic; using System.Text; using ZigBee.Device; namespace Shared.Phone.UserCenter { /// /// 设备选择的界面 /// public class SelectDeviceForm : EditorCommonForm { #region ■ 变量声明___________________________ /// /// 设备选择确定后的回调函数(此函数在点击确认后,会先关闭界面再执行回调方法,与ActionSelectDeviceEx不共存) /// public Action> ActionSelectDevice = null; /// /// 设备选择确定后的回调函数(此函数在点击确认后,不会关闭界面,与ActionSelectDevice不共存,关闭界面请调用CloseForm函数) /// public Action> ActionSelectDeviceEx = null; /// /// 列表控件 /// private VerticalListControl listView = null; #endregion #region ■ 初始化_____________________________ /// /// 画面显示(底层会固定调用此方法,借以完成画面创建) /// /// 需要显示设备列表(有些界面需要剔除一些不要的设备) /// 指定哪些设备的初始状态为选中状态(设备的主键) /// 初始选中状态的设备能否取消 true:可以 false:不允许 public void ShowForm(List i_listShowDevice, List i_listSelectDevice, bool SelcetCancel = true) { //设置标题信息 base.SetTitleText(Language.StringByID(R.MyInternationalizationString.uSelectDevice)); //初始化中部信息 this.InitMiddleFrame(i_listShowDevice, i_listSelectDevice, SelcetCancel); } /// /// 初始化中部信息 /// private void InitMiddleFrame(List i_listShowDevice, List i_listSelectDevice, bool SelcetCancel) { //清空bodyFrame this.ClearBodyFrame(); //完成 var btnfinish = new BottomClickButton(); btnfinish.TextID = R.MyInternationalizationString.uFinish; bodyFrameLayout.AddChidren(btnfinish); btnfinish.ButtonClickEvent += (sender, e) => { List listDevice = this.GetDeviceFromRow(); if (ActionSelectDeviceEx != null) { ActionSelectDeviceEx(listDevice); return; } this.CloseForm(); if (ActionSelectDevice != null) { ActionSelectDevice(listDevice); ActionSelectDevice = null; } }; listView = new VerticalListControl(29); listView.Y = Application.GetRealHeight(-6); listView.Height = btnfinish.Y - ControlCommonResourse.BottomButtonAndListViewSpace + Application.GetRealHeight(6); listView.BackgroundColor = UserCenterColor.Current.White; bodyFrameLayout.AddChidren(listView); //添加所有设备行 HdlThreadLogic.Current.RunThread(() => { Application.RunOnMainThread(() => { int count = i_listShowDevice.Count - 1; for (int i = 0; i < i_listShowDevice.Count; i++) { //添加明细行 this.AddDeviceRow(i_listShowDevice[i], i_listSelectDevice, SelcetCancel, i != count); } //调整列表控件的高度 var realHeight = i_listShowDevice.Count * listView.GetChildren(listView.ChildrenCount - 1).Height; realHeight += listView.rowSpace; if (realHeight < listView.Height) { //缩小控件高度 listView.Height = realHeight; } }); }); } #endregion #region ■ 添加设备行_________________________ /// /// 添加设备行 /// /// 设备 /// 指定哪些设备的初始状态为选中状态(设备的主键) /// 初始选中状态的设备能否取消 true:可以 false:不允许 /// 是否添加底线 private void AddDeviceRow(CommonDevice device, List i_listSelectDevice, bool SelcetCancel, bool addLine) { var row = new DeviceSelectControl(device, listView.rowSpace / 2); listView.AddChidren(row); row.InitControl(); //底线 if (addLine == true) { row.AddBottomLine(); } //设置选择状态 string mainKeys = Common.LocalDevice.Current.GetDeviceMainKeys(device); if (i_listSelectDevice.Contains(mainKeys) == true) { row.SelectCancel = SelcetCancel; row.IsSelected = true; } } #endregion #region ■ 获取选中设备_______________________ /// /// 获取选中的设备 /// /// private List GetDeviceFromRow() { List listDevice = new List(); for (int i = 0; ; i++) { var row = (DeviceSelectControl)this.listView.GetChildren(i); if (row == null) { break; } if (row.IsSelected == true) { listDevice.Add(row.device); } } return listDevice; } #endregion #region ■ 界面关闭___________________________ /// /// 界面关闭 /// public override void CloseForm() { ActionSelectDeviceEx = null; base.CloseForm(); } #endregion } }