using System; using System.Collections.Generic; using Shared.Common; using Shared.Phone.UserView; using Shared.R; using Shared.Phone.Device.CommonForm; using Shared.Phone.UserCenter; using ZigBee.Device; namespace Shared.Phone.Category { /// /// 分类的主界面 /// public class CategoryMainForm : EditorCommonForm { #region ■ 变量声明___________________________ /// /// The instance. /// public static CategoryMainForm instance; /// /// 场景功能中部背景bodyView(高度为设备菜单的那个白色背景的上部到屏幕底部) /// public FrameLayout functionSceneBodyView; /// /// 中部背景bodyView(高度为场景功能切换控件的底部到屏幕底部) /// public FrameLayout functionSceneAutoBodyView; /// /// 右上角添加按钮 /// private IconViewControl btnTopRightAdd = null; /// /// 楼层控件 /// private NormalViewControl btnFloorName = null; /// /// 楼层图标控件 /// private IconViewControl btnFloorIcon = null; /// /// 设备行控件 /// private Dictionary dicDeviceRowControl = new Dictionary(); #endregion #region ■ 初始化_____________________________ /// /// 构造方法 /// public CategoryMainForm() { BackgroundColor = ZigbeeColor.Current.GXCGrayBackgroundColor; instance = this; } /// /// 显示界面--默认场景界面 /// public void ShowForm() { //先清除吧 this.RemoveAll(); //初始化头部控件 this.InitTopControl(); //初始化中间控件 this.InitMidControls(); //添加设备状态上报事件 this.AddNormalDeviceReportEvent(); //添加传感器状态上报事件 this.AddSensorDeviceReportEvent(); } /// /// 初始化头部控件 /// private void InitTopControl() { //头部FrameLayout this.topFrameLayout = new FrameLayout(); topFrameLayout.Y = Application.GetRealHeight(104); topFrameLayout.Height = Application.GetRealHeight(127); topFrameLayout.BackgroundColor = ZigbeeColor.Current.GXCGrayBackgroundColor; this.AddChidren(topFrameLayout); //标题分类 var btnTitle = new NormalViewControl(300, 95, true); btnTitle.X = ControlCommonResourse.XXLeft; btnTitle.Gravity = Gravity.CenterVertical; btnTitle.TextID = R.MyInternationalizationString.Category; btnTitle.TextSize = 24; btnTitle.TextColor = ZigbeeColor.Current.GXCTextDeepBlackColor; btnTitle.IsBold = true; topFrameLayout.AddChidren(btnTitle); //右上角添加按钮 this.btnTopRightAdd = new IconViewControl(104); btnTopRightAdd.X = Application.GetRealWidth(953); btnTopRightAdd.Gravity = Gravity.CenterVertical; btnTopRightAdd.UnSelectedImagePath = "Item/Add_Category.png"; topFrameLayout.AddChidren(btnTopRightAdd); btnTopRightAdd.ButtonClickEvent += (sender, e) => { if (UserCenterResourse.ResidenceOption.CategoryPageSwitchIndex == 0) { //添加场景 Add_Scene(); } else if (UserCenterResourse.ResidenceOption.CategoryPageSwitchIndex == 2) { //添加自动化 Add_Automation(); } }; } /// /// 初始化中间控件 /// private void InitMidControls() { //应该是body吧 this.bodyFrameLayout = new FrameLayout(); bodyFrameLayout.Y = topFrameLayout.Bottom; bodyFrameLayout.Height = Application.GetRealHeight(1549); bodyFrameLayout.BackgroundColor = ZigbeeColor.Current.GXCGrayBackgroundColor; this.AddChidren(bodyFrameLayout); //场景,功能,自动化的切换控件的容器 var frameSwitchBack = new FrameLayout(); frameSwitchBack.Height = Application.GetRealHeight(127); bodyFrameLayout.AddChidren(frameSwitchBack); //拥有楼层时 this.btnFloorName = null; this.btnFloorIcon = null; if (Config.Instance.Home.FloorDics.Count > 0) { //楼层名 this.btnFloorName = new NormalViewControl(200, 69, true); btnFloorName.X = frameSwitchBack.Width - Application.GetRealWidth(200 + 120); btnFloorName.Y = Application.GetRealHeight(17); btnFloorName.TextAlignment = TextAlignment.CenterRight; btnFloorName.IsBold = true; btnFloorName.Text = HdlResidenceLogic.Current.GetFloorNameById(Config.Instance.Home.CurrentFloorId); frameSwitchBack.AddChidren(btnFloorName); btnFloorName.ButtonClickEvent += (sender, e) => { var floors = new Device.Category.SelectFloor(); AddChidren(floors); floors.Init(580, 330, Direction.Right); floors.changeFloor = true; floors.FloorAction += (floorId) => { btnFloorName.Text = Config.Instance.Home.GetFloorNameById(floorId); HdlRoomLogic.Current.CurrentRoom = HdlRoomLogic.Current.GetLoveRoom(); //刷新bodyView this.RefreshBodyView(); }; }; //楼层图标 this.btnFloorIcon = new IconViewControl(69); btnFloorIcon.X = Application.GetRealWidth(950); btnFloorIcon.Y = btnFloorName.Y; btnFloorIcon.UnSelectedImagePath = "Item/Drop_Down.png"; frameSwitchBack.AddChidren(btnFloorIcon); btnFloorIcon.ButtonClickEvent += (sender, e) => { btnFloorName.ButtonClickEvent?.Invoke(sender, e); }; } //目前不知道郭雪城的这个具体放在哪个的位置 this.functionSceneAutoBodyView = new FrameLayout(); functionSceneAutoBodyView.Y = frameSwitchBack.Bottom; functionSceneAutoBodyView.Height = Application.GetRealHeight(1423); bodyFrameLayout.AddChidren(functionSceneAutoBodyView); //场景,功能,自动化的切换控件 var switchContr = new SceneFunctionSwitchControl(); switchContr.Width = Application.GetRealWidth(650); switchContr.Gravity = Gravity.CenterVertical; frameSwitchBack.AddChidren(switchContr); var listTitle = new List(); listTitle.Add(Language.StringByID(R.MyInternationalizationString.uScence)); listTitle.Add(Language.StringByID(R.MyInternationalizationString.uFunction)); if (UserCenterResourse.UserInfo.AuthorityNo == 1 || UserCenterResourse.UserInfo.AuthorityNo == 2) { //成员没有自动化 listTitle.Add(Language.StringByID(R.MyInternationalizationString.Automation)); } //设置初始值 switchContr.SetDefultIndex(UserCenterResourse.ResidenceOption.CategoryPageSwitchIndex); //选择事件 switchContr.SelectTabEvent += (selectIndex) => { UserCenterResourse.ResidenceOption.CategoryPageSwitchIndex = selectIndex; //刷新bodyView this.RefreshBodyView(); }; //开始初始化 switchContr.InitControl(listTitle); } /// /// 刷新bodyView /// public void RefreshBodyView() { this.functionSceneAutoBodyView.RemoveAll(); HdlThreadLogic.Current.RunMainInThread(() => { bool floorVisible = true; //场景 if (UserCenterResourse.ResidenceOption.CategoryPageSwitchIndex == 0) { //初始化房间菜单 this.InitRoomMenuControl(); //显示右上角的加号 this.btnTopRightAdd.Visible = true; } //功能 else if (UserCenterResourse.ResidenceOption.CategoryPageSwitchIndex == 1) { //初始化房间菜单 this.InitRoomMenuControl(); //隐藏右上角的加号 this.btnTopRightAdd.Visible = false; } //自动化 else if (UserCenterResourse.ResidenceOption.CategoryPageSwitchIndex == 2) { this.ShowAutotion(); //隐藏楼层 floorVisible = false; //显示右上角的加号 this.btnTopRightAdd.Visible = true; } //修改楼层的显示效果 if (this.btnFloorName != null) { this.btnFloorName.Visible = floorVisible; this.btnFloorIcon.Visible = floorVisible; } }); } #endregion #region ■ 房间菜单控件_______________________ /// /// 初始化房间菜单控件 /// private void InitRoomMenuControl() { //当前楼层的全部房间 var lisrRoom = HdlRoomLogic.Current.GetRoomsByCurrentFloorIdAppendLoveRoom(); //房间菜单控件 var roomSwitchContr = new RoomDeviceGroupMenuControl(lisrRoom); roomSwitchContr.Y = Application.GetRealHeight(-55); this.functionSceneAutoBodyView.AddChidren(roomSwitchContr); //设置初始值 roomSwitchContr.SetDefultIndex(HdlRoomLogic.Current.CurrentRoom.Id); //选择事件 roomSwitchContr.SelectRoomEvent += (selectRoom) => { HdlRoomLogic.Current.CurrentRoom = selectRoom; //场景 if (UserCenterResourse.ResidenceOption.CategoryPageSwitchIndex == 0) { //在外面清空(特效的问题) this.functionSceneBodyView.RemoveAll(); HdlThreadLogic.Current.RunMainInThread(() => { //刷新场景分支控件 this.RefreshSceneView(selectRoom); }); } //功能 else if (UserCenterResourse.ResidenceOption.CategoryPageSwitchIndex == 1) { //在外面清空(特效的问题) this.functionSceneBodyView.RemoveAll(); HdlThreadLogic.Current.RunMainInThread(() => { //刷新设备分支控件 this.RefreshFunctionView(selectRoom); }); } }; //功能和场景bodyView this.functionSceneBodyView = new FrameLayout(); functionSceneBodyView.Y = roomSwitchContr.Bottom; functionSceneBodyView.Height = functionSceneAutoBodyView.Height - roomSwitchContr.Bottom; functionSceneAutoBodyView.AddChidren(functionSceneBodyView); //执行初始化 roomSwitchContr.InitControl(); } #endregion #region ■ 功能分支___________________________ /// /// 刷新功能分支控件 /// /// private void RefreshFunctionView(Common.Room room) { //获取分组后的设备 var dicGroupDevice = this.GetAllGroupDevice(room); if (dicGroupDevice.Count == 0) { this.ShowNoFunctionTip(); return; } //设备菜单的白色背景 var functionBack1 = new FrameLayout(); functionBack1.X = ControlCommonResourse.XXLeft; functionBack1.Height = Application.GetRealHeight(160); functionBack1.Width = Application.GetRealWidth(1028); functionBack1.BackgroundColor = ZigbeeColor.Current.GXCBackgroundColor; functionSceneBodyView.AddChidren(functionBack1); functionBack1.SetCornerWithSameRadius(Application.GetRealHeight(17), HDLUtils.RectCornerTopLeft); var functionBack2 = new FrameLayout(); functionBack2.X = ControlCommonResourse.XXLeft; functionBack2.Y = functionBack1.Bottom - Application.GetRealHeight(50); functionBack2.Height = Application.GetRealHeight(279 - 160 + 50); functionBack2.Width = Application.GetRealWidth(1028); functionBack2.BackgroundColor = ZigbeeColor.Current.GXCBackgroundColor; functionSceneBodyView.AddChidren(functionBack2); functionBack2.SetCornerWithSameRadius(Application.GetRealHeight(58), HDLUtils.RectCornerBottomLeft); //设备菜单的左右滑动的控件 var HorizontalView = new HorizontalScrolViewLayout(); HorizontalView.X = Application.GetRealWidth(CommonFormResouce.X_Left); HorizontalView.Height = Application.GetRealHeight(279); HorizontalView.Width = Application.GetRealWidth(1028); functionSceneBodyView.AddChidren(HorizontalView); //设备的背景容器 var frameDeviceBack = new FrameLayout(); frameDeviceBack.X = ControlCommonResourse.XXLeft; frameDeviceBack.Y = HorizontalView.Bottom + Application.GetRealHeight(35); frameDeviceBack.BackgroundColor = UserCenterColor.Current.White; frameDeviceBack.Width = bodyFrameLayout.Width; frameDeviceBack.Height = functionSceneBodyView.Height - HorizontalView.Bottom - Application.GetRealHeight(35); frameDeviceBack.SetCornerWithSameRadius(Application.GetRealHeight(58), HDLUtils.RectCornerTopLeft); functionSceneBodyView.AddChidren(frameDeviceBack); //设备列表控件 var listDeviceView = new VerticalListControl(35); listDeviceView.Y = Application.GetRealHeight(11); listDeviceView.Width = Application.GetRealWidth(1022); listDeviceView.Height = frameDeviceBack.Height - Application.GetRealHeight(11); listDeviceView.SetCornerWithSameRadius(Application.GetRealHeight(58), HDLUtils.RectCornerTopLeft); frameDeviceBack.AddChidren(listDeviceView); //上一次选择的菜单 MainPage.Controls.DeviceFunctionUnallocatedControl oldSelectContr = null; DeviceRowInfo nowSelectDeviceInfo = null; foreach (int Textid in dicGroupDevice.Keys) { var rowInfo = dicGroupDevice[Textid]; //设备类型的容器 var devieFrame = new FrameLayout(); devieFrame.Width = Application.GetRealWidth(220); HorizontalView.AddChidren(devieFrame); //菜单图片控件 var deviceObjContr = new MainPage.Controls.DeviceFunctionUnallocatedControl(); devieFrame.AddChidren(deviceObjContr); deviceObjContr.InitControl(Language.StringByID(Textid), rowInfo.IconPath, rowInfo.IconPathSelected, rowInfo.listDeviceKeys); deviceObjContr.ButtonClickEvent += (sender, e) => { //选择的是同一个东西的话,不处理 if (nowSelectDeviceInfo.TextId != rowInfo.TextId) { //上一次的菜单取消,本次菜单选择 oldSelectContr.SetSelectStatu(false); deviceObjContr.SetSelectStatu(true); oldSelectContr = deviceObjContr; nowSelectDeviceInfo = rowInfo; HdlThreadLogic.Current.RunMainInThread(() => { //初始化设备列表控件 this.InitListDeviceControls(listDeviceView, rowInfo); }); } }; if (nowSelectDeviceInfo == null) { //设置初始选择 nowSelectDeviceInfo = rowInfo; //记录初始选择的菜单控件 oldSelectContr = deviceObjContr; deviceObjContr.SetSelectStatu(true); } } if (nowSelectDeviceInfo != null) { //初始化默认的设备列表控件 this.InitListDeviceControls(listDeviceView, nowSelectDeviceInfo); } } /// /// 提示没有功能 /// private void ShowNoFunctionTip() { var noFunction = new Button() { Y = Application.GetRealHeight(320), Width = Application.GetMinRealAverage(757), Height = Application.GetMinRealAverage(435), UnSelectedImagePath = "Item/NoFunction.png", Gravity = Gravity.CenterHorizontal }; functionSceneBodyView.AddChidren(noFunction); var noFunctionTip = new Button() { Y = noFunction.Bottom + Application.GetRealHeight(32), Height = Application.GetRealHeight(200), Width = Application.GetRealWidth(700), Gravity = Gravity.CenterHorizontal, Text = Language.StringByID(R.MyInternationalizationString.NoFunction).Replace("{\\r\\n}", "\r\n"), TextColor = ZigbeeColor.Current.GXCPlaceHolderTextColor, TextAlignment = TextAlignment.Center, IsMoreLines = true }; functionSceneBodyView.AddChidren(noFunctionTip); } #endregion #region ■ 初始化设备列表控件_________________ /// /// 初始化设备列表控件 /// /// /// private void InitListDeviceControls(VerticalListControl listView, DeviceRowInfo rowInfo) { //先清空 listView.RemoveAll(); var listDevice = new List(); foreach (var mainkeys in rowInfo.listDeviceKeys) { var device = LocalDevice.Current.GetDevice(mainkeys); if (device != null) { listDevice.Add(device); } } HdlThreadLogic.Current.RunMain(() => { var listContr = new List(); foreach (var device in listDevice) { Controls.DeviceRowCommon cardContr = null; //窗帘 if (device.Type == DeviceType.WindowCoveringDevice) { cardContr = new Controls.DeviceCurtainRowControl(listView.rowSpace / 2); } //继电器 else if (device.Type == DeviceType.OnOffOutput) { cardContr = new Controls.DeviceRelayRowControl(listView.rowSpace / 2); } //空气开关 else if (device.Type == DeviceType.AirSwitch) { cardContr = new Controls.DeviceAirSwitchRowControl(listView.rowSpace / 2); } //空调 else if (device.Type == DeviceType.Thermostat) { cardContr = new Controls.DeviceAcRowControl(listView.rowSpace / 2); } //彩灯(调光器) else if (device.Type == DeviceType.DimmableLight) { cardContr = new Controls.DeviceColorLightRowControl(listView.rowSpace / 2); } //传感器 else if (device.Type == DeviceType.IASZone) { cardContr = new Controls.DeviceSensorRowControl(listView.rowSpace / 2); } //温湿度 else if (device.Type == DeviceType.TemperatureSensor) { cardContr = new Controls.DeviceTemperatureRowControl(listView.rowSpace / 2); } //门锁 else if (device.Type == DeviceType.DoorLock) { cardContr = new Controls.DeviceDoorLockRowControl(listView.rowSpace / 2); } //无法识别 else { cardContr = new Controls.DeviceRowCommon(listView.rowSpace / 2); //没有状态功能 cardContr.hadStatuFunction = false; } //初始化卡片 listView.AddChidren(cardContr); cardContr.InitControl(device); //控件记录到缓存中 this.dicDeviceRowControl[LocalDevice.Current.GetDeviceMainKeys(device)] = cardContr; //加缓存,然后发命令 listContr.Add(cardContr); } HdlThreadLogic.Current.RunThread(() => { for (int i = 0; i < listContr.Count; i++) { if (listView.Parent == null) { return; } System.Threading.Thread.Sleep(20); //发送获取状态的命令 listContr[i].SendStatuComand(); } }, ShowErrorMode.NO); }); } #endregion #region ■ 场景分支___________________________ /// /// 刷新场景分支控件 /// /// private void RefreshSceneView(Room room) { var listScene = new List(); foreach (var sceneId in room.ListSceneId) { var scene = HdlSceneLogic.Current.GetSceneUIBySceneId(sceneId); if (scene != null) { listScene.Add(scene); } } if (listScene.Count == 0) { this.ShowNoSceneTip(); return; } var dicSceneContr = new Dictionary(); var listview = new VerticalListControl(); functionSceneBodyView.AddChidren(listview); foreach (var scene in listScene) { //场景卡片控件 var sceneView = new SceneCategoryView(); listview.AddChidren(sceneView); sceneView.InitControl(scene, room); dicSceneContr[scene.Id] = sceneView; } HdlThreadLogic.Current.RunThread(() => { //获取全部场景的延时时间 this.GetAllDelayScene(dicSceneContr, listview); }, ShowErrorMode.NO); } /// /// 获取全部场景的延时时间 /// /// private async void GetAllDelayScene(Dictionary dicSceneContr, VerticalListControl listview) { //读取全部的延时时间 var result = await Scene.CatDelaySceneAsync(); if (result == null || result.catDelaySceneResponseData == null || result.catDelaySceneResponseData.DelayScenesList.Count == 0) { //出错不鸟它 return; } string hourText = Language.StringByID(R.MyInternationalizationString.Hour); string minuText = Language.StringByID(R.MyInternationalizationString.Minute); string secondText = Language.StringByID(R.MyInternationalizationString.Second); foreach (var data in result.catDelaySceneResponseData.DelayScenesList) { if (dicSceneContr.ContainsKey(data.ScenesId) == false) { //当前的界面没有显示这个场景 continue; } var seceneContr = dicSceneContr[data.ScenesId]; //保存缓存时间 seceneContr.scene.RemainTime = data.RemainTime; int remainTime = data.RemainTime; if (remainTime <= 0) { continue; } HdlThreadLogic.Current.RunThread(() => { //开启内部延时时间线程(旨在全部地方的同一场景时间同步) HdlSceneLogic.Current.StartDelayTimeThread(seceneContr.scene); while (remainTime > 0 && this.Parent != null) { System.Threading.Thread.Sleep(1000); Application.RunOnMainThread(() => { seceneContr.SetTimeText(this.GetTimeString(remainTime, hourText, minuText, secondText)); }); remainTime--; } Application.RunOnMainThread(() => { if (listview.Parent != null) { seceneContr.SetTimeImage(); //开启Loading特效 seceneContr.StartLoadingApreal(); } }); }); } } /// /// 显示没有场景 /// private void ShowNoSceneTip() { var noFunction = new Button() { Y = Application.GetRealHeight(320), Width = Application.GetMinRealAverage(757), Height = Application.GetMinRealAverage(435), UnSelectedImagePath = "Item/NoFunction.png", Gravity = Gravity.CenterHorizontal }; functionSceneBodyView.AddChidren(noFunction); var noScenceTip = new Button() { Y = noFunction.Bottom + Application.GetRealHeight(32), Height = Application.GetRealHeight(200), Width = Application.GetRealWidth(700), Gravity = Gravity.CenterHorizontal, Text = Language.StringByID(R.MyInternationalizationString.NoScene).Replace("{\\r\\n}", "\r\n"), TextColor = ZigbeeColor.Current.GXCPlaceHolderTextColor, TextAlignment = TextAlignment.Center, IsMoreLines = true }; functionSceneBodyView.AddChidren(noScenceTip); } #endregion #region ■ 一般设备状态上报___________________ /// /// 添加一般设备状态上报事件 /// private void AddNormalDeviceReportEvent() { //设备属性上报(缓存的修改交由 HdlGatewayReceiveLogic 处理) HdlGatewayReceiveLogic.Current.AddAttributeEvent("UserHomeViewDeviceStatus", ReceiveComandDiv.A设备属性上报, (report) => { HdlThreadLogic.Current.RunMain(() => { //处理一般设备的上报数据 string mainKeys = LocalDevice.Current.GetDeviceMainKeys(report); if (this.dicDeviceRowControl.ContainsKey(mainKeys) == true) { //刷新卡片信息 var locadevice = LocalDevice.Current.GetDevice(mainKeys); this.dicDeviceRowControl[mainKeys].RefreshControlInfo(locadevice); } }, ShowErrorMode.NO); }); //设备在线上报(缓存的修改交由 HdlGatewayReceiveLogic 处理) HdlGatewayReceiveLogic.Current.AddAttributeEvent("UserHomeViewDeviceOnline", ReceiveComandDiv.A设备在线上报, (report) => { HdlThreadLogic.Current.RunMain(() => { string mainKeys = LocalDevice.Current.GetDeviceMainKeys(report); if (this.dicDeviceRowControl.ContainsKey(mainKeys) == true) { //刷新卡片状态 this.dicDeviceRowControl[mainKeys].SetRowOnlineStatu(report.IsOnline == 1); return; } }, ShowErrorMode.NO); }); //设备控制反馈上报 HdlGatewayReceiveLogic.Current.AddAttributeEvent("UserHomeViewDeviceRespone", ReceiveComandDiv.A节点控制反馈, (report) => { HdlThreadLogic.Current.RunMain(() => { string mainKeys = LocalDevice.Current.GetDeviceMainKeys(report); if (this.dicDeviceRowControl.ContainsKey(mainKeys) == true) { //设备卡片 var deviceCardContr = this.dicDeviceRowControl[mainKeys]; //已经接收到网关的反馈 deviceCardContr.SetHadGetResponeResultStatu(); } }, ShowErrorMode.NO); }); } #endregion #region ■ 传感器状态上报_____________________ /// /// 添加传感器状态上报事件 /// private void AddSensorDeviceReportEvent() { //传感器上报(缓存的修改交由 HdlGatewayReceiveLogic 处理) HdlGatewayReceiveLogic.Current.AddAttributeEvent("UserHomeViewSensor", ReceiveComandDiv.A传感器上报, (report) => { HdlThreadLogic.Current.RunMain(() => { //处理传感器上报数据 string mainKeys = LocalDevice.Current.GetDeviceMainKeys(report); if (this.dicDeviceRowControl.ContainsKey(mainKeys) == true) { //本地设备对象 var locadevice = LocalDevice.Current.GetDevice(mainKeys); //刷新卡片信息 this.dicDeviceRowControl[mainKeys].RefreshControlInfo(locadevice); } }, ShowErrorMode.NO); }); } #endregion #region ■ 整合设备___________________________ /// /// 获取分组后的设备 /// /// private Dictionary GetAllGroupDevice(Common.Room room) { //全部的设备 var listDevice = HdlRoomLogic.Current.GetRoomListDevice(room); //根据设备所属类型排序 listDevice = LocalDevice.Current.SortDeviceByBelongType(listDevice); var dic = new Dictionary(); foreach (var device in listDevice) { var typeInfo = LocalDevice.Current.GetDeviceBelongEnumInfo(device); //按所属ID分组 if (dic.ContainsKey(typeInfo.BeloneTextId) == false) { dic[typeInfo.BeloneTextId] = new DeviceRowInfo(); string path1 = string.Empty; string path2 = string.Empty; //获取图片 LocalDevice.Current.GetDeviceObjectIcon(typeInfo.ConcreteType, ref path1, ref path2); dic[typeInfo.BeloneTextId].IconPath = path1; dic[typeInfo.BeloneTextId].IconPathSelected = path2; dic[typeInfo.BeloneTextId].TextId = typeInfo.BeloneTextId; } dic[typeInfo.BeloneTextId].listDeviceKeys.Add(LocalDevice.Current.GetDeviceMainKeys(device)); } return dic; } #endregion #region ■ 界面关闭___________________________ /// /// 界面关闭 /// public override void CloseFormBefore() { //把静态变量的这个东西置空 instance = null; base.CloseFormBefore(); } #endregion #region ■ 一般方法___________________________ /// /// 获取时间的翻译文本 /// /// /// 小时的文本 /// 分的文本 /// 秒的文本 /// private string GetTimeString(int second, string hourText, string minuText, string secondText) { string timeStr = string.Empty; int hour = second / 3600; int minu = second % 3600 / 60; int sec = second % 60; if (hour > 0) { timeStr += hour + hourText; } if (minu > 0) { timeStr += minu + minuText; } if (sec > 0) { timeStr += sec + secondText; } return timeStr; } /// /// 添加场景(郭雪城的代码) /// private void Add_Scene() { var scene = new Device.Category.CategoryAddScene(); UserView.HomePage.Instance.AddChidren(scene); UserView.HomePage.Instance.PageIndex += 1; scene.Show(); scene.AddAction = () => { //刷新bodyView this.RefreshBodyView(); }; } /// /// 添加自动化(郭雪城的代码) /// private void Add_Automation() { //new一个新逻辑对象; Common.Logic.CurrentLogic = new Common.Logic(); Common.Logic.CurrentLogic.IsEnable = 1;//默认为开 Common.Logic.CurrentLogic.LogicName = Language.StringByID(MyInternationalizationString.automation1); var addLogicPage = new Shared.Phone.Device.Logic.AddLogicPage(); UserView.HomePage.Instance.AddChidren(addLogicPage); UserView.HomePage.Instance.PageIndex += 1; addLogicPage.Show(); } #endregion #region ■ 结构体_____________________________ /// /// 设备行信息 /// private class DeviceRowInfo { /// /// 文本ID,目前用来做主键 /// public int TextId = 0; /// /// 图标 /// public string IconPath = string.Empty; /// /// 图标 /// public string IconPathSelected = string.Empty; /// /// 设备回路主键 /// public List listDeviceKeys = new List(); } #endregion #region ◆ 自动化__________________________ /// /// 自动化功能代码入口 /// private void ShowAutotion() { // functionSceneAutoBodyView.BackgroundColor = ZigbeeColor.Current.LogicMiddleBackgroundColor; #region ---推荐模板的组件 //推荐模板背景控件 var bjFrameLayout = new FrameLayout { Width = Application.GetRealWidth(1080 - 58), Height = Application.GetRealHeight(170), BackgroundColor = ZigbeeColor.Current.LogicBackgroundColor, X = Application.GetRealWidth(58), //Radius = (uint)Application.GetRealHeight(50), Y = Application.GetRealHeight(30), }; functionSceneAutoBodyView.AddChidren(bjFrameLayout); bjFrameLayout.SetCornerWithSameRadius(Application.GetRealHeight(58), HDLUtils.RectCornerBottomLeft); //图标控件 var sigBtn = new Button { Width = Application.GetMinRealAverage(84), Height = Application.GetMinRealAverage(84), UnSelectedImagePath = "ZigeeLogic/sign.png", X = Application.GetRealWidth(58), Gravity = Gravity.CenterVertical, }; bjFrameLayout.AddChidren(sigBtn); //推荐模板文本控件 var recommendtextBtn = new Button { Width = Application.GetMinRealAverage(300), Height = Application.GetMinRealAverage(84), X = sigBtn.Right + Application.GetRealWidth(35), TextAlignment = TextAlignment.CenterLeft, //Text = "推荐模板", TextID = MyInternationalizationString.logictemplate, Gravity = Gravity.CenterVertical, TextColor = ZigbeeColor.Current.LogicBtnSelectedColor, TextSize = 15, }; bjFrameLayout.AddChidren(recommendtextBtn); //推荐模板开关控件 var recommendswitchBtn = new Button { Width = Application.GetRealWidth(104), Height = Application.GetRealHeight(63), UnSelectedImagePath = "ZigeeLogic/logicclose.png", SelectedImagePath = "ZigeeLogic/logicopen.png", X = bjFrameLayout.Width - Application.GetRealWidth(104 + 58), Gravity = Gravity.CenterVertical, }; bjFrameLayout.AddChidren(recommendswitchBtn); #endregion //默认推荐模板左右可滑控件 var scenehorizontalScrol = new HorizontalScrolViewLayout { Width = Application.GetRealWidth(1080 - 58), X = Application.GetRealWidth(58), Y = bjFrameLayout.Bottom + Application.GetRealHeight(30), Height = Application.GetRealHeight(0), }; functionSceneAutoBodyView.AddChidren(scenehorizontalScrol); //显示自动化列表上下可滑控件 var logicScrolView = new VerticalRefreshLayout//VerticalScrolViewLayout { Height = functionSceneAutoBodyView.Height - bjFrameLayout.Height - bjFrameLayout.Y - scenehorizontalScrol.Height - Application.GetRealHeight(30), //BackgroundColor = ZigbeeColor.Current.LogicBackgroundColor,/ X = Application.GetRealWidth(58), Y = scenehorizontalScrol.Bottom, }; functionSceneAutoBodyView.AddChidren(logicScrolView); logicScrolView.SetCornerWithSameRadius(Application.GetRealHeight(58), HDLUtils.RectCornerTopLeft); bool no = false; //显示默认模板的界面事件 recommendswitchBtn.MouseUpEventHandler += (sender, e) => { int Yheight = 0; recommendswitchBtn.IsSelected = !recommendswitchBtn.IsSelected; scenehorizontalScrol.RemoveAll(); if (recommendswitchBtn.IsSelected) { no = true; scenehorizontalScrol.Height = Application.GetRealHeight(246); Yheight = 20; for (int i = 1; i < 4; i++) { var frameLayout = new FrameLayout { Width = Application.GetMinRealAverage(369 + 46), Height = Application.GetMinRealAverage(246), }; scenehorizontalScrol.AddChidren(frameLayout); var logiciocnBtn = new Button { Width = Application.GetMinRealAverage(369), Height = Application.GetMinRealAverage(246), UnSelectedImagePath = "ZigeeLogic/" + i + ".png", Tag = i, }; frameLayout.AddChidren(logiciocnBtn); var logicnameBtn = new Button { Width = Application.GetMinRealAverage(250), Height = Application.GetMinRealAverage(80), X = Application.GetRealWidth(23), Y = Application.GetRealHeight(246 - 23 - 80), TextAlignment = TextAlignment.CenterLeft, TextColor = ZigbeeColor.Current.LogicBtnSaveTextColor, TextSize = 14, }; frameLayout.AddChidren(logicnameBtn); if (i == 1) { logicnameBtn.Text = Language.StringByID(MyInternationalizationString.onlight); } else if (i == 2) { logicnameBtn.Text = Language.StringByID(MyInternationalizationString.offlight); } else if (i == 3) { logicnameBtn.Text = Language.StringByID(MyInternationalizationString.automation1); } EventHandler iconclick = (sender1, e1) => { Common.Logic.CurrentLogic = new Common.Logic(); Common.Logic.CurrentLogic.IsEnable = 1;//默认为开 if (logiciocnBtn.Tag.ToString() == "3") { Common.Logic.CurrentLogic.LogicName = logicnameBtn.Text; //Common.Logic.CurrentLogic.LogicCustomPushText = Common.Logic.CurrentLogic.LogicName + Language.StringByID(MyInternationalizationString.defaulttext); var addLogicPage = new Device.Logic.AddLogicPage(); HomePage.Instance.AddChidren(addLogicPage); HomePage.Instance.PageIndex += 1; addLogicPage.Show(); } else { Common.Logic.CurrentLogic.LogicName = logicnameBtn.Text; //Common.Logic.CurrentLogic.LogicCustomPushText = Common.Logic.CurrentLogic.LogicName + Language.StringByID(MyInternationalizationString.defaulttext); Device.Logic.TemplatePage templatePage = new Device.Logic.TemplatePage(); Device.Logic.TemplatePage.s = logiciocnBtn.Tag.ToString(); HomePage.Instance.AddChidren(templatePage); HomePage.Instance.PageIndex += 1; templatePage.Show(); } }; logiciocnBtn.MouseUpEventHandler += iconclick; logicnameBtn.MouseUpEventHandler += iconclick; } } else { no = false; scenehorizontalScrol.Height = Application.GetRealHeight(0); Yheight = 0; } logicScrolView.Y = scenehorizontalScrol.Bottom + Yheight; logicScrolView.Height = functionSceneAutoBodyView.Height - bjFrameLayout.Height - bjFrameLayout.Y - scenehorizontalScrol.Height - Application.GetRealHeight(30) - Yheight; Automationview(logicScrolView, no); }; //下拉刷新自动化列表的事件 logicScrolView.BeginHeaderRefreshingAction += () => { //重新刷新logic列表 Common.Logic.LogicList.Clear(); Read(logicScrolView, no); //关闭刷新View; logicScrolView.EndHeaderRefreshing(); }; Read(logicScrolView, no); } /// /// 读取自动化列表数据; /// /// private async void Read(VerticalRefreshLayout logicScrolView, bool no) { CommonPage.Loading.Start(); if (Common.Logic.LogicList.Count == 0) { var Idlist = await Device.Logic.Send.GetLogicId(0); if (Idlist.Count != 0) { var listlogic = await Device.Logic.Send.ReadList(Idlist.Count, 0); //foreach可能集合已被修改,枚举操作可能不会执行,可能出现崩溃(建议for)。 for (int j = 0; j < listlogic.Count; j++) { var logic = listlogic[j]; if (logic.LogicType != 0) { continue; } Common.Logic.LogicList.Add(logic); } } } //自动化 Automationview(logicScrolView, no); CommonPage.Loading.Hide(); } /// /// 加载自动化列表界面 /// /// Refresview. private async void Automationview(VerticalRefreshLayout refresview, bool no) { refresview.RemoveAll(); if (Common.Logic.LogicList.Count == 0 && no == false) { //就是为了显示引导添加图标; refresview.BackgroundColor = 0x00000000; var noFrameLayout = new FrameLayout { Height = Application.GetRealHeight(434 + 200 + 32 + 160), //BackgroundColor = ZigbeeColor.Current.LogicMiddleBackgroundColor, }; refresview.AddChidren(noFrameLayout); var noIconBtn = new Button { Y = Application.GetRealHeight(160), Width = Application.GetMinRealAverage(756), Height = Application.GetMinRealAverage(434), UnSelectedImagePath = "Item/NoFunction.png", X = Application.GetRealWidth(104), }; noFrameLayout.AddChidren(noIconBtn); var noTextBtn = new Button() { Y = noIconBtn.Bottom, Height = Application.GetRealHeight(200) + Application.GetRealHeight(32), Width = Application.GetRealWidth(700), //Gravity = Gravity.CenterHorizontal, Text = Language.StringByID(MyInternationalizationString.automationaddtext).Replace("{\\r\\n}", "\r\n"), TextColor = ZigbeeColor.Current.GXCPlaceHolderTextColor, TextAlignment = TextAlignment.Center, IsMoreLines = true, X = Application.GetRealWidth(190 - 58), }; noFrameLayout.AddChidren(noTextBtn); } else { if (Common.Logic.LogicList.Count == 0 && no == true) { ///改变滑动view的颜色; refresview.BackgroundColor = 0x00000000; } else { refresview.BackgroundColor = ZigbeeColor.Current.LogicBackgroundColor; } } foreach (var logic in Common.Logic.LogicList) { var fLayout = new FrameLayout { Height = Application.GetRealHeight(190 + 30), Width = Application.GetRealWidth(1080 - 58), BackgroundColor = ZigbeeColor.Current.LogicBackgroundColor, }; refresview.AddChidren(fLayout); var logicRowlayout = new RowLayout { Height = Application.GetRealHeight(190 + 30), Width = Application.GetRealWidth(1080 - 58), LineColor = ZigbeeColor.Current.LogicBackgroundColor, BackgroundColor = ZigbeeColor.Current.LogicBackgroundColor, SubViewWidth = Application.GetRealWidth(184),//改变编辑控件宽度多少; }; fLayout.AddChidren(logicRowlayout); var logicnameBtn = new Button { Height = Application.GetRealHeight(58), Width = Application.GetRealWidth(350), Text = logic.LogicName, X = Application.GetRealWidth(12 + 46), Y = Application.GetRealHeight(30), TextAlignment = TextAlignment.CenterLeft, TextColor = ZigbeeColor.Current.LogicTextBlackColor, TextSize = 14, }; logicRowlayout.AddChidren(logicnameBtn); var logicswitchBtn = new Button { Width = Application.GetRealWidth(104), Height = Application.GetRealHeight(63), UnSelectedImagePath = "ZigeeLogic/logicclose.png", SelectedImagePath = "ZigeeLogic/logicopen.png", X = logicRowlayout.Width - Application.GetRealWidth(104 + 58), Y = Application.GetRealHeight(58 + 30 + 9 + 30), }; logicRowlayout.AddChidren(logicswitchBtn); logicswitchBtn.MouseUpEventHandler += (sender1, e1) => { logicswitchBtn.IsSelected = !logicswitchBtn.IsSelected; if (logicswitchBtn.IsSelected) { //逻辑开 logic.IsEnable = 1; StatusColor(logic, logicRowlayout, 1); } else { //逻辑关 logic.IsEnable = 0; StatusColor(logic, logicRowlayout, 0); } Device.Logic.Send.LogicControlSwitch(logic); //Logic.Send.AddModifyLogic(logic); }; if (logic.IsEnable == 1) { logicswitchBtn.IsSelected = true; StatusColor(logic, logicRowlayout, 1); } else if (logic.IsEnable == 0) { logicswitchBtn.IsSelected = false; StatusColor(logic, logicRowlayout, 0); } ///编辑 var edit = new Button { BackgroundColor = ZigbeeColor.Current.LogicEditBlackColor1, Text = Language.StringByID(MyInternationalizationString.edit), TextColor = ZigbeeColor.Current.LogicBtnSaveTextColor, }; logicRowlayout.AddRightView(edit); edit.MouseUpEventHandler += (sender, e) => { Common.Logic.CurrentLogic = logic; var logicCommunalPage = new Device.Logic.LogicCommunalPage(); HomePage.Instance.AddChidren(logicCommunalPage); HomePage.Instance.PageIndex += 1; logicCommunalPage.Show(() => { logicnameBtn.Text = logic.LogicName; Automationview(refresview, no); }); }; ///删除 var del = new Button { BackgroundColor = ZigbeeColor.Current.LogicDelBlackColor1, Text = Language.StringByID(MyInternationalizationString.del), TextColor = ZigbeeColor.Current.LogicBtnSaveTextColor, }; logicRowlayout.AddRightView(del); del.MouseUpEventHandler += (sender, e) => { var alert = new Alert(Language.StringByID(MyInternationalizationString.tip), Language.StringByID(MyInternationalizationString.doyouwanttodelete), Language.StringByID(MyInternationalizationString.cancel), Language.StringByID(MyInternationalizationString.confrim)); alert.ResultEventHandler += (sender1, e1) => { if (e1) { Common.Logic.LogicList.Remove(logic); Automationview(refresview, no); Device.Logic.Send.DelLogic(logic.LogicId); } }; alert.Show(); }; var line = new Button { Y = fLayout.Height - 1, Height = 1, X = Application.GetRealWidth(58), Width = Application.GetRealWidth(1080 - 58), BackgroundColor = ZigbeeColor.Current.LogicRowLayoutLineColor, }; fLayout.AddChidren(line); } } /// /// 显示自动化输出功能模块图标的颜色 /// /// /// /// private void StatusColor(Common.Logic logic, RowLayout logicRowlayout, int intvalue) { var logictimeBtn = new Button { Height = Application.GetRealHeight(58), Width = logicRowlayout.Width - Application.GetRealWidth(58 + 12 + 350), Y = Application.GetRealHeight(30), X = Application.GetRealWidth(365), TextAlignment = TextAlignment.CenterRight, TextColor = ZigbeeColor.Current.LogicListWeekTextColor, }; logicRowlayout.AddChidren(logictimeBtn); ///显示执行周期 Device.Logic.Method.UpdateWeek(logictimeBtn, logic); List indexlist = new List(); List iconIndexlist = new List(); for (int i = 0; i < logic.Actions.Count; i++) { var linkType = logic.Actions[i]["LinkType"].ToString(); var d = indexlist.Find((value) => { return value == linkType; }); if (d == null) { indexlist.Add(linkType); } } if (indexlist.Contains("0")) { iconIndexlist.Add("0"); } if (indexlist.Contains("2")) { iconIndexlist.Add("2"); } if (indexlist.Contains("6")) { iconIndexlist.Add("6"); } if (indexlist.Contains("7")) { iconIndexlist.Add("7"); } for (int i = 0; i < iconIndexlist.Count; i++) { var iconindex = iconIndexlist[i]; var typebjBtn = new FrameLayout { Width = Application.GetMinRealAverage(82), Height = Application.GetMinRealAverage(82), X = Application.GetRealWidth(58) + Application.GetRealWidth(12 + (12 + 82 + 45 + 12) * i), Y = Application.GetRealHeight(58 + 30 + 30), Radius = (uint)Application.GetRealHeight(41), BackgroundColor = ZigbeeColor.Current.LogicMiddleBackgroundColor, }; logicRowlayout.AddChidren(typebjBtn); var typeIconBtn = new Button { Width = Application.GetMinRealAverage(58), Height = Application.GetMinRealAverage(58), Gravity = Gravity.Center, }; typebjBtn.AddChidren(typeIconBtn); var connectIconBtn = new Button { Y = typebjBtn.Y + Application.GetRealHeight(35), X = Application.GetRealWidth(58) + Application.GetRealWidth((12 + 82 + 12) + (12 + 45 + 82 + 12) * i), Width = Application.GetRealWidth(48), Height = Application.GetRealHeight(15), UnSelectedImagePath = "ZigeeLogic/connect.png", }; logicRowlayout.AddChidren(connectIconBtn); if (iconIndexlist.Count - 1 == i) { connectIconBtn.Visible = false; } switch (iconindex) { case "0": { if (intvalue == 1) { typeIconBtn.UnSelectedImagePath = "ZigeeLogic/function1.png"; typebjBtn.BackgroundColor = ZigbeeColor.Current.LogicFunction1Color; } else { typeIconBtn.UnSelectedImagePath = "ZigeeLogic/nofunction.png"; typebjBtn.BackgroundColor = ZigbeeColor.Current.LogicMiddleBackgroundColor; } } break; case "2": { if (intvalue == 1) { typeIconBtn.UnSelectedImagePath = "ZigeeLogic/scene1.png"; typebjBtn.BackgroundColor = ZigbeeColor.Current.LogicScene1Color; } else { typeIconBtn.UnSelectedImagePath = "ZigeeLogic/noscene.png"; typebjBtn.BackgroundColor = ZigbeeColor.Current.LogicMiddleBackgroundColor; } } break; case "6": { if (intvalue == 1) { typeIconBtn.UnSelectedImagePath = "ZigeeLogic/security1.png"; typebjBtn.BackgroundColor = ZigbeeColor.Current.LogicSecurity1Color; } else { typeIconBtn.UnSelectedImagePath = "ZigeeLogic/nosecurity.png"; typebjBtn.BackgroundColor = ZigbeeColor.Current.LogicMiddleBackgroundColor; } } break; case "7": { if (intvalue == 1) { typeIconBtn.UnSelectedImagePath = "ZigeeLogic/delay1.png"; typebjBtn.BackgroundColor = ZigbeeColor.Current.LogicDelay1Color; } else { typeIconBtn.UnSelectedImagePath = "ZigeeLogic/nodelay.png"; typebjBtn.BackgroundColor = ZigbeeColor.Current.LogicMiddleBackgroundColor; } } break; } } } #endregion } }