using System; using System.Collections.Generic; using System.Threading.Tasks; using ZigBee.Device; namespace Shared.Phone.UserCenter.Device { /// /// 网关指定设备的信息画面(这个画面会修改设备的物理名字)★ /// public class DeviceEpointInfoForm : UserCenterCommonForm { #region ■ 变量声明___________________________ /// /// 设备名称变更的回调函数(设备名称,房间名) /// public Action> ActionNameChangedEvent = null; /// /// 列表控件 /// private VerticalScrolViewLayout listview = null; /// /// 新上报的设备 /// private CommonDevice newDevice = null; #endregion #region ■ 初始化_____________________________ /// /// 画面显示(底层会固定调用此方法,借以完成画面创建) /// /// 设备 public void ShowForm(CommonDevice device) { this.newDevice = device; //设置标题信息 base.SetTitleText(Language.StringByID(R.MyInternationalizationString.uDeviceSettingUp)); //检测设备是否拥有测试的功能 if (Common.LocalDevice.Current.DeviceIsCanTest(device) == true) { //初始化头部右边的测试图标 this.InitTopLayoutRightIcon(); } //初始化中部控件 this.InitMiddleFrame(); } /// /// 初始化头部右边的测试图标 /// private void InitTopLayoutRightIcon() { var btnIcon = new TopLayoutMostRightView(); btnIcon.UnSelectedImagePath = "Item/Test.png"; btnIcon.SelectedImagePath = "Item/TestSelected.png"; topFrameLayout.AddChidren(btnIcon); btnIcon.MouseUpEventHandler += (sender, e) => { //测试 Common.LocalDevice.Current.SetTestCommand(newDevice); }; } /// /// 初始化中部控件 /// public void InitMiddleFrame() { this.bodyFrameLayout.RemoveAll(); //房间 List listRoomName = Common.Room.CurrentRoom.GetRoomListNameByDevice(this.newDevice); //图标 var btnImage = new IconViewControl(332); btnImage.Y = Application.GetRealHeight(40); btnImage.Gravity = Gravity.CenterHorizontal; //设置大图 Common.LocalDevice.Current.SetDeviceBigIconToControl(btnImage, this.newDevice); bodyFrameLayout.AddChidren(btnImage); btnImage.MouseUpEventHandler += (sender, e) => { //显示变更设备图标的界面 this.ShowChangedIconForm(btnImage); }; listview = new VerticalScrolViewLayout(); listview.Y = btnImage.Bottom + Application.GetRealHeight(50); listview.Height = bodyFrameLayout.Height - btnImage.Bottom - Application.GetRealHeight(50); bodyFrameLayout.AddChidren(listview); //设备名称 string caption = Language.StringByID(R.MyInternationalizationString.uDeviceName); string nameValue = Common.LocalDevice.Current.GetDeviceEpointName(newDevice); var btnDeviceView = new EditorNameValueRow(caption, nameValue); listview.AddChidren(btnDeviceView); btnDeviceView.InitControl(); //请输入设备名称 btnDeviceView.SetEmptyNameTip(Language.StringByID(R.MyInternationalizationString.uDeviceNameMastInput)); //编辑设备名称 btnDeviceView.SetDialogTitle(Language.StringByID(R.MyInternationalizationString.uEditorDeviceName)); btnDeviceView.ActionNameChangedEvent += (deviceName) => { //设备重命名 this.DeviceReName(deviceName, listRoomName); }; var statuRow = new StatuRowLayout(listview); //所属区域 var btnBelongAreaView = new RowTopGrayView(false); btnBelongAreaView.TextID = R.MyInternationalizationString.uBelongArea; statuRow.AddChidren(btnBelongAreaView); var btnBelongArea = new RowBottomBlackView(false); btnBelongArea.Text = Common.Room.CurrentRoom.GetRoomName(listRoomName); statuRow.AddChidren(btnBelongArea); //向右图标 statuRow.AddRightIconControl(); statuRow.MouseUpEvent += (sender, e) => { var form = new SelectRoomForm(); this.AddForm(form, listRoomName); form.ActionSelectRoom = (list) => { if (list != null) { //变更房间 Common.Room.CurrentRoom.ChangedRoom(newDevice, list); btnBelongArea.Text = Common.Room.CurrentRoom.GetRoomName(list); listRoomName = list; if (this.ActionNameChangedEvent != null) { string name = Common.LocalDevice.Current.GetDeviceEpointName(this.newDevice); this.ActionNameChangedEvent(name, listRoomName); } } }; }; //所属模块 var row = new RowLayout(); row.Height = ControlCommonResourse.ListViewRowHeight; listview.AddChidren(row); var btnBelongObjectView = new RowTopGrayView(false); btnBelongObjectView.TextID = R.MyInternationalizationString.uBelongObject; row.AddChidren(btnBelongObjectView); var btnBelongObject = new RowBottomBlackView(false); btnBelongObject.Text = Common.LocalDevice.Current.GetDeviceMacName(newDevice); row.AddChidren(btnBelongObject); //添加所有菜单 this.AddAllMenu(); } #endregion #region ■ 添加菜单___________________________ /// /// 添加所有菜单 /// private async void AddAllMenu() { //开启进度条 this.ShowProgressBar(); //添加按键面板的【指示灯设置】行 这个东西需要判断功能 bool result = await this.AddPanelPilolightSettionRow(); if (result == false) { //关闭进度条 this.CloseProgressBar(ShowReLoadMode.YES); return; } //PIR传感器的信息 IASZone.ConfigureParamates Pirconfigure = null; //如果是PIR传感器并且支持开关,只能河东的设备使用 (这里判断的是输出簇) if ((newDevice is IASZone) == true && Common.LocalDevice.Current.IsHdlDevice(newDevice) == true && Common.LocalDevice.Current.OutDeviceIsCanOnOff(newDevice) == true) { //获取PIR传感器的【灯光配置】,错误时返回null Pirconfigure = await Common.LocalDevice.Current.GetPirSensorLightSettion((IASZone)newDevice); if (Pirconfigure == null) { //关闭进度条 this.CloseProgressBar(ShowReLoadMode.YES); return; } } Application.RunOnMainThread(() => { //添加按键面板的【绑定目标】行 this.AddPanelBindTargetRow(); //添加PIR传感器的【绑定目标】行 this.AddPirSensorBindTargetRow(Pirconfigure); //关闭进度条 this.CloseProgressBar(); }); } #endregion #region ■ 按键面板指示灯设置_________________ /// /// 添加按键面板的【指示灯设置】行 /// private async Task AddPanelPilolightSettionRow() { if (newDevice.Type != DeviceType.OnOffSwitch) { //如果是不是按键面板的话 return true; } if (Common.LocalDevice.Current.IsHdlDevice(newDevice) == false) { //只有河东的设备能使用 return true; } //检测控制面板(灯类)所拥有的功能:需要颜色调节功能 Dictionary dicCheck = await Common.LocalDevice.Current.CheckPanelLightFunctionLevel2((Panel)newDevice); if (dicCheck == null) { return false; } if (dicCheck["颜色调节"] == false) { //这个面板没有颜色调节的功能 return true; } Application.RunOnMainThread(() => { //指示灯设置 var staRow = new StatuRowLayout(listview); var btnPilolight = new RowCenterView(false); btnPilolight.TextID = R.MyInternationalizationString.uPilolightSettion; staRow.AddChidren(btnPilolight); //向右图标 staRow.AddRightIconControl(); staRow.MouseUpEvent += (sender, e) => { var form = new DevicePanel.PanelPilolightSettionMenuForm(); this.AddForm(form, (Panel)newDevice); }; }); return true; } #endregion #region ■ 按键面板绑定目标___________________ /// /// 添加按键面板的【绑定目标】行 /// private void AddPanelBindTargetRow() { if (newDevice.Type != DeviceType.OnOffSwitch) { //如果是不是按键面板的话 return; } //绑定目标 var staRow = new StatuRowLayout(listview); var btnBind = new RowCenterView(false); btnBind.TextID = R.MyInternationalizationString.uBindTargets; staRow.AddChidren(btnBind); //向右图标 staRow.AddRightIconControl(); staRow.MouseUpEvent += (sender, e) => { var panel = newDevice as ZigBee.Device.Panel; var bindPage = new Shared.Phone.UserCenter.Bind.PanelBindPage(); Shared.Phone.UserView.HomePage.Instance.AddChidren(bindPage); Shared.Phone.UserView.HomePage.Instance.PageIndex += 1; bindPage.Show(panel.Gateway, panel); }; } #endregion #region ■ PIR传感器绑定目标__________________ /// /// 添加PIR传感器的【绑定目标】行 /// /// 灯光配置 private void AddPirSensorBindTargetRow(IASZone.ConfigureParamates configure) { //如果是PIR传感器并且支持开关 (这里判断的是输出簇) if (configure == null || (newDevice is IASZone) == false || Common.LocalDevice.Current.OutDeviceIsCanOnOff(newDevice) == false) { return; } //绑定目标 var staRow = new StatuRowLayout(listview); var btnBind = new RowCenterView(false); btnBind.TextID = R.MyInternationalizationString.uBindTargets; staRow.AddChidren(btnBind); //向右图标 staRow.AddRightIconControl(); staRow.MouseUpEvent += (sender, e) => { var form = new DevicePir.PirSensorBindTargetForm(); this.AddForm(form, (IASZone)newDevice); }; //检测目标推送 var SenRow = new RowLayout(); SenRow.Height = ControlCommonResourse.ListViewRowHeight; listview.AddChidren(SenRow); var btnSend = new RowCenterView(false); btnSend.TextID = R.MyInternationalizationString.uTestTargetPush; SenRow.AddChidren(btnSend); var btnSendSwich = new SwichControl(); SenRow.AddChidren(btnSendSwich); btnSendSwich.IsSelected = configure.controlDevEnable; btnSendSwich.MouseUpEventHandler += async (sender, e) => { configure.controlDevEnable = !configure.controlDevEnable; //开启进度条 this.ShowProgressBar(); var result = await Common.LocalDevice.Current.SetPirSensorLightSettion((IASZone)newDevice, configure); //关闭进度条 this.CloseProgressBar(); if (result == false) { //将缓存值改回来 configure.controlDevEnable = !configure.controlDevEnable; return; } Application.RunOnMainThread(() => { btnSendSwich.IsSelected = !btnSendSwich.IsSelected; }); }; } #endregion #region ■ 修改名字___________________________ /// /// 设备重命名 /// /// Name. /// Name. private async void DeviceReName(string name, List listRoomName) { //设备名称修改 var result = await Common.LocalDevice.Current.ReName(this.newDevice, name); if (result == false) { return; } Application.RunOnMainThread(() => { if (this.ActionNameChangedEvent != null) { name = Common.LocalDevice.Current.GetDeviceEpointName(this.newDevice); this.ActionNameChangedEvent(name, listRoomName); } }); } #endregion #region ■ 变更图片___________________________ /// /// 显示变更设备图标的界面 /// /// private void ShowChangedIconForm(IconViewControl btnIcon) { var form = new Phone.Device.CommonForm.DeviceIconSelectedIMGByLocal(); UserView.HomePage.Instance.AddChidren(form); UserView.HomePage.Instance.PageIndex += 1; form.Show(); form.action = (unSelectedImagePath, selectedImagePath) => { btnIcon.UnSelectedImagePath = selectedImagePath; //变更图标 Common.LocalDevice.Current.ChangedDeviceIcon(newDevice, unSelectedImagePath); if (this.ActionNameChangedEvent != null) { List listRoomName = Common.Room.CurrentRoom.GetRoomListNameByDevice(this.newDevice); string name = Common.LocalDevice.Current.GetDeviceEpointName(this.newDevice); this.ActionNameChangedEvent(name, listRoomName); } }; } #endregion } }